Theory Valuation1
theory Valuation1
imports "Group-Ring-Module.Algebra9"
begin
declare ex_image_cong_iff [simp del]
chapter "Preliminaries"
section "Int and ant (augmented integers)"
lemma int_less_mono:"(a::nat) < b ⟹ int a < int b"
apply simp
done
lemma zless_trans:"⟦(i::int) < j; j < k⟧ ⟹ i < k"
apply simp
done
lemma zmult_pos_bignumTr0:"∃L. ∀m. L < m ⟶ z < x + int m"
by (subgoal_tac "∀m. (nat((abs z) + (abs x))) < m ⟶ z < x + int m",
blast, rule allI, rule impI, arith)
lemma zle_less_trans:"⟦(i::int) ≤ j; j < k⟧ ⟹ i < k"
apply (simp add:less_le)
done
lemma zless_le_trans:"⟦(i::int) < j; j ≤ k⟧ ⟹ i < k"
apply (simp add:less_le)
done
lemma zmult_pos_bignumTr:"0 < (a::int) ⟹
∃l. ∀m. l < m ⟶ z < x + (int m) * a"
apply (cut_tac zmult_pos_bignumTr0[of "z" "x"])
apply (erule exE)
apply (subgoal_tac "∀m. L < m ⟶ z < x + int m * a", blast)
apply (rule allI, rule impI)
apply (drule_tac a = m in forall_spec, assumption)
apply (subgoal_tac "0 ≤ int m")
apply (frule_tac a = "int m" and b = a in pos_zmult_pos, assumption)
apply (cut_tac order_refl[of "x"])
apply (frule_tac z' = "int m" and z = "int m * a" in
zadd_zle_mono[of "x" "x"], assumption+)
apply (rule_tac y = "x + int m" and z = "x + (int m)* a" in
less_le_trans[of "z"], assumption+)
apply simp
done
lemma ale_shift:"⟦(x::ant)≤ y; y = z⟧ ⟹ x ≤ z"
by simp
lemma aneg_na_0[simp]:"a < 0 ⟹ na a = 0"
by (simp add:na_def)
lemma amult_an_an:"an (m * n) = (an m) * (an n)"
apply (simp add:an_def)
apply (simp add: of_nat_mult a_z_z)
done
definition
adiv :: "[ant, ant] ⇒ ant" (infixl "adiv" 200) where
"x adiv y = ant ((tna x) div (tna y))"
definition
amod :: "[ant, ant] ⇒ ant" (infixl "amod" 200) where
"x amod y = ant ((tna x) mod (tna y))"
lemma apos_amod_conj:"0 < ant b ⟹
0 ≤ (ant a) amod (ant b) ∧ (ant a) amod (ant b) < (ant b)"
by (simp add:amod_def tna_ant, simp only:ant_0[THEN sym],
simp add:aless_zless)
lemma amod_adiv_equality:
"(ant a) = (a div b) *⇩a (ant b) + ant (a mod b)"
apply (simp add:adiv_def tna_ant a_z_z a_zpz asprod_mult)
done
lemma asp_z_Z:"z *⇩a ant x ∈ Z⇩∞"
by (simp add:asprod_mult z_in_aug_inf)
lemma apos_in_aug_inf:"0 ≤ a ⟹ a ∈ Z⇩∞"
by (simp add:aug_inf_def, rule contrapos_pp, simp+,
cut_tac minf_le_any[of "0"], frule ale_antisym[of "0" "-∞"],
assumption+, simp)
lemma amult_1_both:"⟦0 < (w::ant); x * w = 1⟧ ⟹ x = 1 ∧ w = 1"
apply (cut_tac mem_ant[of "x"], cut_tac mem_ant[of "w"],
(erule disjE)+, simp,
(frule sym, thin_tac "∞ = 1", simp only:ant_1[THEN sym],
simp del:ant_1))
apply (erule disjE, erule exE, simp,
(frule sym, thin_tac "-∞ = 1", simp only:ant_1[THEN sym],
simp del:ant_1), simp)
apply (frule sym, thin_tac "-∞ = 1", simp only:ant_1[THEN sym],
simp del:ant_1)
apply ((erule disjE)+, erule exE, simp,
frule_tac aless_imp_le[of "0" "-∞"],
cut_tac minf_le_any[of "0"],
frule ale_antisym[of "0" "-∞"], assumption+,
simp only:ant_0[THEN sym], simp,
frule sym, thin_tac "-∞ = 1", simp only:ant_1[THEN sym],
simp del:ant_1)
apply ((erule disjE)+, (erule exE)+, simp only:ant_1[THEN sym],
simp del:ant_1 add:a_z_z,
(cut_tac a = z and b = za in mult.commute, simp,
cut_tac z = za and z' = z in times_1_both, assumption+),
simp)
apply (erule exE, simp,
cut_tac x = z and y = 0 in less_linear, erule disjE, simp,
frule sym, thin_tac "-∞ = 1", simp only:ant_1[THEN sym],
simp del:ant_1,
erule disjE, simp add:ant_0, simp,
frule sym, thin_tac "∞ = 1", simp only:ant_1[THEN sym],
simp del:ant_1,
erule disjE, erule exE, simp,
frule sym, thin_tac "∞ = 1", simp only:ant_1[THEN sym],
simp del:ant_1, simp)
done
lemma poss_int_neq_0:"0 < (z::int) ⟹ z ≠ 0"
by simp
lemma aadd_neg_negg[simp]:"⟦a ≤ (0::ant); b < 0⟧ ⟹ a + b < 0"
apply (frule ale_minus[of "a" "0"], simp,
frule aless_minus[of "b" "0"], simp)
apply (frule aadd_pos_poss[of "-a" "-b"], assumption+,
simp add:aminus_add_distrib[THEN sym, of "a" "b"],
frule aless_minus[of "0" "-(a + b)"], simp add:a_minus_minus)
done
lemma aadd_two_negg[simp]:"⟦a < (0::ant); b < 0⟧ ⟹ a + b < 0"
by auto
lemma amin_aminTr:"(z::ant) ≤ z' ⟹ amin z w ≤ amin z' w"
by (simp add:amin_def, simp add:aneg_le,
(rule impI)+, frule aless_le_trans[of "w" "z" "z'"],
assumption+, simp)
lemma amin_le1:"(z::ant) ≤ z' ⟹ (amin z w) ≤ z'"
by (simp add:amin_def, simp add:aneg_le,
rule impI, frule aless_le_trans[of "w" "z" "z'"],
assumption+, simp add:aless_imp_le)
lemma amin_le2:"(z::ant) ≤ z' ⟹ (amin w z) ≤ z'"
by (simp add:amin_def, rule impI,
frule ale_trans[of "w" "z" "z'"], assumption+)
lemma Amin_geTr:"(∀j ≤ n. f j ∈ Z⇩∞) ∧ (∀j ≤ n. z ≤ (f j)) ⟶
z ≤ (Amin n f)"
apply (induct_tac n)
apply (rule impI, erule conjE, simp)
apply (rule impI, (erule conjE)+,
cut_tac Nsetn_sub_mem1[of n], simp,
drule_tac x = "Suc n" in spec, simp,
rule_tac z = z and x = "Amin n f" and y = "f(Suc n)" in amin_ge1,
simp+)
done
lemma Amin_ge:"⟦∀j ≤ n. f j ∈ Z⇩∞; ∀j ≤ n. z ≤ (f j)⟧ ⟹
z ≤ (Amin n f)"
by (simp add:Amin_geTr)
definition
Abs :: "ant ⇒ ant" where
"Abs z = (if z < 0 then -z else z)"
lemma Abs_pos:"0 ≤ Abs z"
by (simp add:Abs_def, rule conjI, rule impI,
cut_tac aless_minus[of "z" "0"], simp,
assumption,
rule impI, simp add:aneg_less[of "z" "0"])
lemma Abs_x_plus_x_pos:"0 ≤ (Abs x) + x"
apply (case_tac "x < 0",
simp add:Abs_def, simp add:aadd_minus_inv)
apply (simp add:aneg_less,
simp add:Abs_def, simp add:aneg_less[THEN sym, of "0" "x"],
simp add:aneg_less[of "x" "0"], simp add:aadd_two_pos)
done
lemma Abs_ge_self:"x ≤ Abs x"
apply (simp add:Abs_def, rule impI,
cut_tac ale_minus[of "x" "0"],
simp add:aminus_0, simp add:aless_imp_le)
done
lemma na_1:"na 1 = Suc 0"
apply (simp only:ant_1[THEN sym], simp only:na_def,
simp only:ant_0[THEN sym], simp only:aless_zless[of "1" "0"],
simp, subgoal_tac "∞ ≠ 1", simp)
apply (simp only:ant_1[THEN sym], simp only:tna_ant,
rule not_sym, simp only:ant_1[THEN sym], simp del:ant_1)
done
lemma ant_int:"ant (int n) = an n"
by (simp add:an_def)
lemma int_nat:"0 < z ⟹ int (nat z) = z"
by arith
lemma int_ex_nat:"0 < z ⟹ ∃n. int n = z"
by (cut_tac int_nat[of z], blast, assumption)
lemma eq_nat_pos_ints:
"⟦nat (z::int) = nat (z'::int); 0 ≤ z; 0 ≤ z'⟧ ⟹ z = z'"
by simp
lemma a_p1_gt[simp]:"⟦a ≠ ∞; a ≠ -∞⟧ ⟹ a < a + 1"
apply (cut_tac aadd_poss_less[of a 1],
simp add:aadd_commute, assumption+)
apply (cut_tac zposs_aposss[of 1], simp)
done
lemma gt_na_poss:"(na a) < m ⟹ 0 < m"
apply (simp add:na_def)
done
lemma azmult_less:"⟦a ≠ ∞; na a < m; 0 < x⟧
⟹ a < int m *⇩a x"
apply (cut_tac mem_ant[of "a"])
apply (erule disjE)
apply (case_tac "x = ∞") apply simp
apply (subst less_le[of "-∞" "∞"]) apply simp
apply (frule aless_imp_le[of "0" "x"], frule apos_neq_minf[of "x"])
apply (cut_tac mem_ant[of "x"], simp, erule exE, simp)
apply (simp add:asprod_amult a_z_z)
apply (simp, erule exE, simp)
apply (frule_tac a = "ant z" in gt_na_poss[of _ "m"])
apply (case_tac "x = ∞", simp)
apply (frule aless_imp_le[of "0" "x"])
apply (frule apos_neq_minf[of "x"])
apply (cut_tac mem_ant[of "x"], simp, erule exE,
simp add:asprod_amult a_z_z)
apply (subst aless_zless)
apply (cut_tac a = "ant z" in gt_na_poss[of _ "m"], assumption)
apply (smt a0_less_int_conv aposs_na_poss int_less_mono int_nat na_def of_nat_0_le_iff pos_zmult_pos tna_ant z_neq_inf)
done
lemma zmult_gt_one:"⟦2 ≤ m; 0 < xa⟧ ⟹ 1 < int m * xa"
by (metis ge2_zmult_pos mult.commute)
lemma zmult_pos:"⟦ 0 < m; 0 < (a::int)⟧ ⟹ 0 < (int m) * a"
by (frule zmult_zless_mono2[of "0" "a" "int m"], simp, simp)
lemma ant_int_na:"⟦0 ≤ a; a ≠ ∞ ⟧ ⟹ ant (int (na a)) = a"
by (frule an_na[of "a"], assumption, simp add:an_def)
lemma zpos_nat:"0 ≤ (z::int) ⟹ ∃n. z = int n"
apply (subgoal_tac "z = int (nat z)")
apply blast apply simp
done
section "nsets"
lemma nsetTr1:"⟦j ∈ nset a b; j ≠ a⟧ ⟹ j ∈ nset (Suc a) b"
apply (simp add:nset_def)
done
lemma nsetTr2:"j ∈ nset (Suc a) (Suc b) ⟹ j - Suc 0 ∈ nset a b"
apply (simp add:nset_def, erule conjE,
simp add:skip_im_Tr4[of "j" "b"])
done
lemma nsetTr3:"⟦j ≠ Suc (Suc 0); j - Suc 0 ∈ nset (Suc 0) (Suc n)⟧
⟹ Suc 0 < j - Suc 0"
apply (simp add:nset_def, erule conjE, subgoal_tac "j ≠ 0",
rule contrapos_pp, simp+)
done
lemma Suc_leD1:"Suc m ≤ n ⟹ m < n"
apply (insert lessI[of "m"],
rule less_le_trans[of "m" "Suc m" "n"], assumption+)
done
lemma leI1:"n < m ⟹ ¬ ((m::nat) ≤ n)"
apply (rule contrapos_pp, simp+)
done
lemma neg_zle:"¬ (z::int) ≤ z' ⟹ z' < z"
apply (simp add: not_le)
done
lemma nset_m_m:"nset m m = {m}"
by (simp add:nset_def,
rule equalityI, rule subsetI, simp,
rule subsetI, simp)
lemma nset_Tr51:"⟦j ∈ nset (Suc 0) (Suc (Suc n)); j ≠ Suc 0⟧
⟹ j - Suc 0 ∈ nset (Suc 0) (Suc n)"
apply (simp add:nset_def, (erule conjE)+,
frule_tac m = j and n = "Suc (Suc n)" and l = "Suc 0" in diff_le_mono,
simp)
done
lemma nset_Tr52:"⟦j ≠ Suc (Suc 0); Suc 0 ≤ j - Suc 0⟧
⟹ ¬ j - Suc 0 ≤ Suc 0"
by auto
lemma nset_Suc:"nset (Suc 0) (Suc (Suc n)) =
nset (Suc 0) (Suc n) ∪ {Suc (Suc n)}"
by (auto simp add:nset_def)
lemma AinequalityTr0:"x ≠ -∞ ⟹ ∃L. (∀N. L < N ⟶
(an m) < (x + an N))"
apply (case_tac "x = ∞", simp add:an_def)
apply (cut_tac mem_ant[of "x"], simp, erule exE, simp add:an_def a_zpz,
simp add:aless_zless,
cut_tac x = z in zmult_pos_bignumTr0[of "int m"], simp)
done
lemma AinequalityTr:"⟦0 < b ∧ b ≠ ∞; x ≠ -∞⟧ ⟹ ∃L. (∀N. L < N ⟶
(an m) < (x + (int N) *⇩a b))"
apply (frule_tac AinequalityTr0[of "x" "m"],
erule exE,
subgoal_tac "∀N. L < N ⟶ an m < x + (int N) *⇩a b",
blast, rule allI, rule impI)
apply (drule_tac a = N in forall_spec, assumption,
erule conjE,
cut_tac N = N in asprod_ge[of "b"], assumption,
thin_tac "x ≠ - ∞", thin_tac "b ≠ ∞", thin_tac "an m < x + an N",
simp)
apply (frule_tac x = "an N" and y = "int N *⇩a b" and z = x in aadd_le_mono,
simp only:aadd_commute[of _ "x"])
done
lemma two_inequalities:"⟦∀(n::nat). x < n ⟶ P n; ∀(n::nat). y < n ⟶ Q n⟧
⟹ ∀n. (max x y) < n ⟶ (P n) ∧ (Q n)"
by auto
lemma multi_inequalityTr0:"(∀j ≤ (n::nat). (x j) ≠ -∞ ) ⟶
(∃L. (∀N. L < N ⟶ (∀l ≤ n. (an m) < (x l) + (an N))))"
apply (induct_tac n)
apply (rule impI, simp)
apply (rule AinequalityTr0[of "x 0" "m"], assumption)
apply (rule impI)
apply (subgoal_tac "∀l. l ≤ n ⟶ l ≤ (Suc n)", simp)
apply (erule exE)
apply (frule_tac a = "Suc n" in forall_spec, simp)
apply (frule_tac x = "x (Suc n)" in AinequalityTr0[of _ "m"])
apply (erule exE)
apply (subgoal_tac "∀N. (max L La) < N ⟶
(∀l ≤ (Suc n). an m < x l + an N)", blast)
apply (rule allI, rule impI, rule allI, rule impI)
apply (rotate_tac 1)
apply (case_tac "l = Suc n", simp,
drule_tac m = l and n = "Suc n" in noteq_le_less, assumption+,
drule_tac x = l and n = "Suc n" in less_le_diff, simp,
simp)
done
lemma multi_inequalityTr1:"⟦∀j ≤ (n::nat). (x j) ≠ - ∞⟧ ⟹
∃L. (∀N. L < N ⟶ (∀l ≤ n. (an m) < (x l) + (an N)))"
by (simp add:multi_inequalityTr0)
lemma gcoeff_multi_inequality:"⟦∀N. 0 < N ⟶ (∀j ≤ (n::nat). (x j) ≠ -∞ ∧
0 < (b N j) ∧ (b N j) ≠ ∞)⟧ ⟹
∃L. (∀N. L < N ⟶ (∀l ≤ n.(an m) < (x l) + (int N) *⇩a (b N l)))"
apply (subgoal_tac "∀j ≤ n. x j ≠ - ∞")
apply (frule multi_inequalityTr1[of "n" "x" "m"])
apply (erule exE)
apply (subgoal_tac "∀N. L < N ⟶
(∀l ≤ n. an m < x l + (int N) *⇩a (b N l))")
apply blast
apply (rule allI, rule impI, rule allI, rule impI,
drule_tac a = N in forall_spec, simp,
drule_tac a = l in forall_spec, assumption,
drule_tac a = N in forall_spec, assumption,
drule_tac a = l in forall_spec, assumption,
drule_tac a = l in forall_spec, assumption)
apply (cut_tac b = "b N l" and N = N in asprod_ge, simp, simp,
(erule conjE)+, simp, thin_tac "x l ≠ - ∞", thin_tac "b N l ≠ ∞")
apply (frule_tac x = "an N" and y = "int N *⇩a b N l" and z = "x l" in
aadd_le_mono, simp add:aadd_commute,
rule allI, rule impI,
cut_tac lessI[of "(0::nat)"],
drule_tac a = "Suc 0" in forall_spec, assumption)
apply simp
done
primrec m_max :: "[nat, nat ⇒ nat] ⇒ nat"
where
m_max_0: "m_max 0 f = f 0"
| m_max_Suc: "m_max (Suc n) f = max (m_max n f) (f (Suc n))"
lemma m_maxTr:"∀l ≤ n. (f l) ≤ m_max n f"
apply (induct_tac n)
apply simp
apply (rule allI, rule impI)
apply simp
apply (case_tac "l = Suc n", simp)
apply (cut_tac m = l and n = "Suc n" in noteq_le_less, assumption+,
thin_tac "l ≤ Suc n", thin_tac "l ≠ Suc n",
frule_tac x = l and n = "Suc n" in less_le_diff,
thin_tac "l < Suc n", simp)
apply (drule_tac a = l in forall_spec, assumption)
apply simp
done
lemma m_max_gt:"l ≤ n ⟹ (f l) ≤ m_max n f"
apply (simp add:m_maxTr)
done
lemma ASum_zero:" (∀j ≤ n. f j ∈ Z⇩∞) ∧ (∀l ≤ n. f l = 0) ⟶ ASum f n = 0"
apply (induct_tac n)
apply (rule impI, erule conjE, simp)
apply (rule impI)
apply (subgoal_tac "(∀j≤n. f j ∈ Z⇩∞) ∧ (∀l≤n. f l = 0)", simp)
apply (simp add:aadd_0_l, erule conjE,
thin_tac "(∀j≤n. f j ∈ Z⇩∞) ∧ (∀l≤n. f l = 0) ⟶ ASum f n = 0")
apply (rule conjI)
apply (rule allI, rule impI,
drule_tac a = j in forall_spec, simp, assumption+)
apply (thin_tac "∀j≤Suc n. f j ∈ Z⇩∞")
apply (rule allI, rule impI,
drule_tac a = l in forall_spec, simp+)
done
lemma eSum_singleTr:"(∀j ≤ n. f j ∈ Z⇩∞) ∧ (j ≤ n ∧ (∀l ∈{h. h ≤ n} - {j}. f l = 0)) ⟶ ASum f n = f j"
apply (induct_tac n)
apply (simp, rule impI, (erule conjE)+)
apply (case_tac "j ≤ n")
apply simp
apply (simp add:aadd_0_r)
apply simp
apply (simp add:nat_not_le_less[of j])
apply (frule_tac m = n and n = j in Suc_leI)
apply (frule_tac m = j and n = "Suc n" in le_antisym, assumption+, simp)
apply (cut_tac n = n in ASum_zero [of _ "f"])
apply (subgoal_tac "(∀j≤n. f j ∈ Z⇩∞) ∧ (∀l≤n. f l = 0)")
apply (thin_tac "∀j≤Suc n. f j ∈ Z⇩∞",
thin_tac "∀l∈{h. h ≤ Suc n} - {Suc n}. f l = 0", simp only:mp)
apply (simp add:aadd_0_l)
apply (thin_tac "(∀j≤n. f j ∈ Z⇩∞) ∧ (∀l≤n. f l = 0) ⟶ ASum f n = 0")
apply (rule conjI,
thin_tac "∀l∈{h. h ≤ Suc n} - {Suc n}. f l = 0", simp)
apply (thin_tac "∀j≤Suc n. f j ∈ Z⇩∞", simp)
done
lemma eSum_single:"⟦∀j ≤ n. f j ∈ Z⇩∞ ; j ≤ n; ∀l ∈ {h. h ≤ n} - {j}. f l = 0⟧
⟹ ASum f n = f j"
apply (simp add:eSum_singleTr)
done
lemma ASum_eqTr:"(∀j ≤ n. f j ∈ Z⇩∞) ∧ (∀j ≤ n. g j ∈ Z⇩∞) ∧
(∀j ≤ n. f j = g j) ⟶ ASum f n = ASum g n"
apply (induct_tac n)
apply (rule impI, simp)
apply (rule impI, (erule conjE)+)
apply simp
done
lemma ASum_eq:"⟦∀j ≤ n. f j ∈ Z⇩∞; ∀j ≤ n. g j ∈ Z⇩∞; ∀j ≤ n. f j = g j⟧ ⟹
ASum f n = ASum g n"
by (cut_tac ASum_eqTr[of n f g], simp)
definition
Kronecker_delta :: "[nat, nat] ⇒ ant"
("(δ⇘_ _⇙)" [70,71]70) where
"δ⇘i j⇙ = (if i = j then 1 else 0)"
definition
K_gamma :: "[nat, nat] ⇒ int"
("(γ⇘_ _⇙)" [70,71]70) where
"γ⇘i j⇙ = (if i = j then 0 else 1)"
abbreviation
TRANSPOS ("(τ⇘_ _⇙)" [90,91]90) where
"τ⇘i j⇙ == transpos i j"
lemma Kdelta_in_Zinf:"⟦j ≤ (Suc n); k ≤ (Suc n)⟧ ⟹
z *⇩a (δ⇘j k⇙) ∈ Z⇩∞"
apply (simp add:Kronecker_delta_def)
apply (simp add:z_in_aug_inf Zero_in_aug_inf)
apply (simp add:asprod_n_0 Zero_in_aug_inf)
done
lemma Kdelta_in_Zinf1:"⟦j ≤ n; k ≤ n⟧ ⟹ δ⇘j k⇙ ∈ Z⇩∞"
apply (simp add:Kronecker_delta_def)
apply (simp add:z_in_aug_inf Zero_in_aug_inf)
apply (rule impI)
apply (simp only:ant_1[THEN sym], simp del:ant_1 add:z_in_aug_inf)
done
primrec m_zmax :: "[nat, nat ⇒ int] ⇒ int"
where
m_zmax_0: "m_zmax 0 f = f 0"
| m_zmax_Suc: "m_zmax (Suc n) f = zmax (m_zmax n f) (f (Suc n))"
lemma m_zmax_gt_eachTr:
"(∀j ≤ n. f j ∈ Zset) ⟶ (∀j ≤ n. (f j) ≤ m_zmax n f)"
apply (induct_tac n)
apply (rule impI, rule allI, rule impI, simp)
apply (rule impI)
apply simp
apply (rule allI, rule impI)
apply (case_tac "j = Suc n", simp)
apply (simp add:zmax_def)
apply (drule_tac m = j and n = "Suc n" in noteq_le_less, assumption,
drule_tac x = j and n = "Suc n" in less_le_diff, simp)
apply (drule_tac a = j in forall_spec, assumption)
apply (simp add:zmax_def)
done
lemma m_zmax_gt_each:"(∀j ≤ n. f j ∈ Zset) ⟹ (∀j ≤ n. (f j) ≤ m_zmax n f)"
apply (simp add:m_zmax_gt_eachTr)
done
lemma n_notin_Nset_pred:" 0 < n ⟹ ¬ n ≤ (n - Suc 0)"
apply simp
done
lemma Nset_preTr:"⟦0 < n; j ≤ (n - Suc 0)⟧ ⟹ j ≤ n"
apply simp
done
lemma Nset_preTr1:"⟦0 < n; j ≤ (n - Suc 0)⟧ ⟹ j ≠ n"
apply simp
done
lemma transpos_noteqTr:"⟦0 < n; k ≤ (n - Suc 0); j ≤ n; j ≠ n⟧
⟹ j ≠ (τ⇘j n⇙) k"
apply (rule contrapos_pp, simp+)
apply (simp add:transpos_def)
apply (case_tac "k = j", simp, simp)
apply (case_tac "k = n", simp)
apply (simp add:n_notin_Nset_pred)
done
chapter "Elementary properties of a valuation"
section "Definition of a valuation"
definition
valuation :: "[('b, 'm) Ring_scheme, 'b ⇒ ant] ⇒ bool" where
"valuation K v ⟷
v ∈ extensional (carrier K) ∧
v ∈ carrier K → Z⇩∞ ∧
v (𝟬⇘K⇙) = ∞ ∧ (∀x∈((carrier K) - {𝟬⇘K⇙}). v x ≠ ∞) ∧
(∀x∈(carrier K). ∀y∈(carrier K). v (x ⋅⇩r⇘K⇙ y) = (v x) + (v y)) ∧
(∀x∈(carrier K). 0 ≤ (v x) ⟶ 0 ≤ (v (1⇩r⇘K⇙ ±⇘K⇙ x))) ∧
(∃x. x ∈ carrier K ∧ (v x) ≠ ∞ ∧ (v x) ≠ 0)"
lemma (in Corps) invf_closed:"x ∈ carrier K - {𝟬} ⟹ x⇗‐ K⇖ ∈ carrier K"
by (cut_tac invf_closed1[of x], simp, assumption)
lemma (in Corps) valuation_map:"valuation K v ⟹ v ∈ carrier K → Z⇩∞"
by (simp add:valuation_def)
lemma (in Corps) value_in_aug_inf:"⟦valuation K v; x ∈ carrier K⟧ ⟹
v x ∈ Z⇩∞"
by (simp add:valuation_def, (erule conjE)+, simp add:funcset_mem)
lemma (in Corps) value_of_zero:"valuation K v ⟹ v (𝟬) = ∞"
by (simp add:valuation_def)
lemma (in Corps) val_nonzero_noninf:"⟦valuation K v; x ∈ carrier K; x ≠ 𝟬⟧
⟹ (v x) ≠ ∞"
by (simp add:valuation_def)
lemma (in Corps) value_inf_zero:"⟦valuation K v; x ∈ carrier K; v x = ∞⟧
⟹ x = 𝟬"
by (rule contrapos_pp, simp+,
frule val_nonzero_noninf[of v x], assumption+, simp)
lemma (in Corps) val_nonzero_z:"⟦valuation K v; x ∈ carrier K; x ≠ 𝟬⟧ ⟹
∃z. (v x) = ant z"
by (frule value_in_aug_inf[of v x], assumption+,
frule val_nonzero_noninf[of v x], assumption+,
cut_tac mem_ant[of "v x"], simp add:aug_inf_def)
lemma (in Corps) val_nonzero_z_unique:"⟦valuation K v; x ∈ carrier K; x ≠ 𝟬⟧
⟹ ∃!z. (v x) = ant z"
by (rule ex_ex1I, simp add:val_nonzero_z, simp)
lemma (in Corps) value_noninf_nonzero:"⟦valuation K v; x ∈ carrier K; v x ≠ ∞⟧
⟹ x ≠ 𝟬"
by (rule contrapos_pp, simp+, simp add:value_of_zero)
lemma (in Corps) val1_neq_0:"⟦valuation K v; x ∈ carrier K; v x = 1⟧ ⟹
x ≠ 𝟬"
apply (rule contrapos_pp, simp+, simp add:value_of_zero)
apply (simp only:ant_1[THEN sym], cut_tac z_neq_inf[THEN not_sym, of 1], simp)
done
lemma (in Corps) val_Zmin_sym:"⟦valuation K v; x ∈ carrier K; y ∈ carrier K⟧
⟹ amin (v x) (v y) = amin (v y ) (v x)"
by (simp add:amin_commute)
lemma (in Corps) val_t2p:"⟦valuation K v; x ∈ carrier K; y ∈ carrier K⟧
⟹ v (x ⋅⇩r y ) = v x + v y"
by (simp add:valuation_def)
lemma (in Corps) val_axiom4:"⟦valuation K v; x ∈ carrier K; 0 ≤ v x⟧ ⟹
0 ≤ v (1⇩r ± x)"
by (simp add:valuation_def)
lemma (in Corps) val_axiom5:"valuation K v ⟹
∃x. x ∈ carrier K ∧ v x ≠ ∞ ∧ v x ≠ 0"
by (simp add:valuation_def)
lemma (in Corps) val_field_nonzero:"valuation K v ⟹ carrier K ≠ {𝟬}"
by (rule contrapos_pp, simp+,
frule val_axiom5[of v],
erule exE, (erule conjE)+, simp add:value_of_zero)
lemma (in Corps) val_field_1_neq_0:"valuation K v ⟹ 1⇩r ≠ 𝟬"
apply (rule contrapos_pp, simp+)
apply (frule val_axiom5[of v])
apply (erule exE, (erule conjE)+)
apply (cut_tac field_is_ring,
frule_tac t = x in Ring.ring_l_one[THEN sym, of "K"], assumption+,
simp add:Ring.ring_times_0_x, simp add:value_of_zero)
done
lemma (in Corps) value_of_one:"valuation K v ⟹ v (1⇩r) = 0"
apply (cut_tac field_is_ring, frule Ring.ring_one[of "K"])
apply (frule val_t2p[of v "1⇩r" "1⇩r"], assumption+,
simp add:Ring.ring_l_one, frule val_field_1_neq_0[of v],
frule val_nonzero_z[of v "1⇩r"], assumption+,
erule exE, simp add:a_zpz)
done
lemma (in Corps) has_val_one_neq_zero:"valuation K v ⟹ 1⇩r ≠ 𝟬"
by (frule value_of_one[of "v"],
rule contrapos_pp, simp+, simp add:value_of_zero)
lemma (in Corps) val_minus_one:"valuation K v ⟹ v (-⇩a 1⇩r) = 0"
apply (cut_tac field_is_ring, frule Ring.ring_one[of "K"],
frule Ring.ring_is_ag[of "K"],
frule val_field_1_neq_0[of v],
frule aGroup.ag_inv_inj[of "K" "1⇩r" "𝟬"], assumption+,
simp add:Ring.ring_zero, assumption)
apply (frule val_nonzero_z[of v "-⇩a 1⇩r"],
rule aGroup.ag_mOp_closed, assumption+, simp add:aGroup.ag_inv_zero,
erule exE, frule val_t2p [THEN sym, of v "-⇩a 1⇩r" "-⇩a 1⇩r"])
apply (simp add:aGroup.ag_mOp_closed[of "K" "1⇩r"],
simp add:aGroup.ag_mOp_closed[of "K" "1⇩r"],
frule Ring.ring_inv1_3[THEN sym, of "K" "1⇩r" "1⇩r"], assumption+,
simp add:Ring.ring_l_one, simp add:value_of_one a_zpz)
done
lemma (in Corps) val_minus_eq:"⟦valuation K v; x ∈ carrier K⟧ ⟹
v (-⇩a x) = v x"
apply (cut_tac field_is_ring,
simp add:Ring.ring_times_minusl[of K x],
subst val_t2p[of v], assumption+,
frule Ring.ring_is_ag[of "K"], rule aGroup.ag_mOp_closed, assumption+,
simp add:Ring.ring_one, assumption, simp add:val_minus_one,
simp add:aadd_0_l)
done
lemma (in Corps) value_of_inv:"⟦valuation K v; x ∈ carrier K; x ≠ 𝟬⟧ ⟹
v (x⇗‐K⇖) = - (v x)"
apply (cut_tac invf_inv[of x], erule conjE,
frule val_t2p[of v "x⇗‐K⇖" x], assumption+,
simp+, simp add:value_of_one, simp add:a_inv)
apply simp
done
lemma (in Corps) val_exp_ring:"⟦ valuation K v; x ∈ carrier K; x ≠ 𝟬⟧
⟹ (int n) *⇩a (v x) = v (x^⇗K n⇖)"
apply (cut_tac field_is_ring,
induct_tac n, simp add:Ring.ring_r_one, simp add:value_of_one)
apply (drule sym, simp)
apply (subst val_t2p[of v _ x], assumption+,
rule Ring.npClose, assumption+,
frule val_nonzero_z[of v x], assumption+,
erule exE, simp add:asprod_mult a_zpz,
simp add: distrib_right)
done
text‹exponent in a field›
lemma (in Corps) val_exp:"⟦ valuation K v; x ∈ carrier K; x ≠ 𝟬⟧ ⟹
z *⇩a (v x) = v (x⇘K⇙⇗z⇖)"
apply (simp add:npowf_def)
apply (case_tac "0 ≤ z",
simp, frule val_exp_ring [of v x "nat z"], assumption+,
simp, simp)
apply (simp add:zle,
cut_tac invf_closed1[of x], simp,
cut_tac val_exp_ring [THEN sym, of v "x⇗‐ K⇖" "nat (- z)"], simp,
thin_tac "v (x⇗‐ K⇖^⇗K (nat (- z))⇖) = (- z) *⇩a v (x⇗‐ K⇖)", erule conjE)
apply (subst value_of_inv[of v x], assumption+)
apply (frule val_nonzero_z[of v x], assumption+, erule exE, simp,
simp add:asprod_mult aminus, simp+)
done
lemma (in Corps) value_zero_nonzero:"⟦valuation K v; x ∈ carrier K; v x = 0⟧
⟹ x ≠ 𝟬"
by (frule value_noninf_nonzero[of v x], assumption+, simp,
assumption)
lemma (in Corps) v_ale_diff:"⟦valuation K v; x ∈ carrier K; y ∈ carrier K;
x ≠ 𝟬; v x ≤ v y ⟧ ⟹ 0 ≤ v(y ⋅⇩r x⇗‐ K⇖)"
apply (frule value_in_aug_inf[of v x], simp+,
frule value_in_aug_inf[of v y], simp+,
frule val_nonzero_z[of v x], assumption+,
erule exE)
apply (cut_tac invf_closed[of x], simp+,
simp add:val_t2p,
simp add:value_of_inv[of v "x"],
frule_tac x = "ant z" in ale_diff_pos[of _ "v y"],
simp add:diff_ant_def)
apply simp
done
lemma (in Corps) amin_le_plusTr:"⟦valuation K v; x ∈ carrier K; y ∈ carrier K;
v x ≠ ∞; v y ≠ ∞; v x ≤ v y⟧ ⟹ amin (v x) (v y) ≤ v ( x ± y)"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag,
frule value_noninf_nonzero[of v x], assumption+,
frule v_ale_diff[of v x y], assumption+,
cut_tac invf_closed1[of x],
frule Ring.ring_tOp_closed[of K y "x⇗‐ K⇖"], assumption+, simp,
frule Ring.ring_one[of "K"],
frule aGroup.ag_pOp_closed[of "K" "1⇩r" "y ⋅⇩r x⇗‐ K⇖"], assumption+,
frule val_axiom4[of v "y ⋅⇩r ( x⇗‐ K⇖)"], assumption+)
apply (frule aadd_le_mono[of "0" "v (1⇩r ± y ⋅⇩r x⇗‐ K⇖)" "v x"],
simp add:aadd_0_l, simp add:aadd_commute[of _ "v x"],
simp add:val_t2p[THEN sym, of v x],
simp add:Ring.ring_distrib1 Ring.ring_r_one,
simp add:Ring.ring_tOp_commute[of "K" "x"],
simp add:Ring.ring_tOp_assoc, simp add:linvf,
simp add:Ring.ring_r_one,
cut_tac amin_le_l[of "v x" "v y"],
rule ale_trans[of "amin (v x) (v y)" "v x" "v (x ± y)"], assumption+)
apply simp
done
lemma (in Corps) amin_le_plus:"⟦valuation K v; x ∈ carrier K; y ∈ carrier K⟧
⟹ (amin (v x) (v y)) ≤ (v (x ± y))"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag)
apply (case_tac "v x = ∞ ∨ v y = ∞")
apply (erule disjE, simp,
frule value_inf_zero[of v x], assumption+,
simp add:aGroup.ag_l_zero amin_def,
frule value_inf_zero[of v y], assumption+,
simp add:aGroup.ag_r_zero amin_def, simp, erule conjE)
apply (cut_tac z = "v x" and w = "v y" in ale_linear,
erule disjE, simp add:amin_le_plusTr,
frule_tac amin_le_plusTr[of v y x], assumption+,
simp add:aGroup.ag_pOp_commute amin_commute)
done
lemma (in Corps) value_less_eq:"⟦ valuation K v; x ∈ carrier K; y ∈ carrier K;
(v x) < (v y)⟧ ⟹ (v x) = (v (x ± y))"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule amin_le_plus[of v x y], assumption+,
frule aless_imp_le[of "v x" "v y"],
simp add: amin_def)
apply (frule amin_le_plus[of v "x ± y" "-⇩a y"],
rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+,
simp add:val_minus_eq,
frule aGroup.ag_mOp_closed[of "K" "y"], assumption+,
simp add:aGroup.ag_pOp_assoc[of "K" "x" "y"],
simp add:aGroup.ag_r_inv1, simp add:aGroup.ag_r_zero,
simp add:amin_def)
apply (case_tac "¬ (v (x ±⇘K⇙ y) ≤ (v y))", simp+)
done
lemma (in Corps) value_less_eq1:"⟦valuation K v; x ∈ carrier K; y ∈ carrier K;
(v x) < (v y)⟧ ⟹ v x = v (y ± x)"
apply (cut_tac field_is_ring,
frule Ring.ring_is_ag[of "K"],
frule value_less_eq[of v x y], assumption+)
apply (subst aGroup.ag_pOp_commute, assumption+)
done
lemma (in Corps) val_1px:"⟦valuation K v; x ∈ carrier K; 0 ≤ (v (1⇩r ± x))⟧
⟹ 0 ≤ (v x)"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Ring.ring_one[of "K"])
apply (rule contrapos_pp, simp+,
case_tac "x = 𝟬⇘K⇙",
simp add:aGroup.ag_r_zero, simp add:value_of_zero,
simp add: aneg_le[of "0" "v x"],
frule value_less_eq[of v x "1⇩r"], assumption+,
simp add:value_of_one)
apply (drule sym,
simp add:aGroup.ag_pOp_commute[of "K" "x"])
done
lemma (in Corps) val_1mx:"⟦valuation K v; x ∈ carrier K;
0 ≤ (v (1⇩r ± (-⇩a x)))⟧ ⟹ 0 ≤ (v x)"
by (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule val_1px[of v "-⇩a x"],
simp add:aGroup.ag_mOp_closed, assumption, simp add:val_minus_eq)
section "The normal valuation of v"
definition
Lv :: "[('r, 'm) Ring_scheme , 'r ⇒ ant] ⇒ ant" where
"Lv K v = AMin {x. x ∈ v ` carrier K ∧ 0 < x}"
definition
n_val :: "[('r, 'm) Ring_scheme, 'r ⇒ ant] ⇒ ('r ⇒ ant)" where
"n_val K v = (λx∈ carrier K. (THE l. (l * (Lv K v)) = v x))"
definition
Pg :: "[('r, 'm) Ring_scheme, 'r ⇒ ant] ⇒ 'r" where
"Pg K v = (SOME x. x ∈ carrier K - {𝟬⇘K⇙} ∧ v x = Lv K v)"
lemma (in Corps) vals_pos_nonempty:"valuation K v ⟹
{x. x ∈ v ` carrier K ∧ 0 < x} ≠ {}"
using val_axiom5[of v] value_noninf_nonzero[of v] value_of_inv[THEN sym, of v]
by (auto simp: ex_image_cong_iff) (metis Ring.ring_is_ag aGroup.ag_mOp_closed aGroup.ag_pOp_closed aGroup.ag_r_inv1 f_is_ring zero_lt_inf)
lemma (in Corps) vals_pos_LBset:"valuation K v ⟹
{x. x ∈ v ` carrier K ∧ 0 < x} ⊆ LBset 1"
by (rule subsetI, simp add:LBset_def, erule conjE,
rule_tac x = x in gt_a0_ge_1, assumption)
lemma (in Corps) Lv_pos:"valuation K v ⟹ 0 < Lv K v"
apply (simp add:Lv_def,
frule vals_pos_nonempty[of v],
frule vals_pos_LBset[of v],
simp only:ant_1[THEN sym],
frule AMin[of "{x. x ∈ v ` carrier K ∧ 0 < x}" "1"], assumption+,
erule conjE)
apply simp
done
lemma (in Corps) AMin_z:"valuation K v ⟹
∃a. AMin {x. x ∈ v ` carrier K ∧ 0 < x} = ant a"
apply (frule vals_pos_nonempty[of v],
frule vals_pos_LBset[of v],
simp only:ant_1[THEN sym],
frule AMin[of "{x. x ∈ v ` carrier K ∧ 0 < x}" "1"], assumption+,
erule conjE)
apply (frule val_axiom5[of v],
erule exE, (erule conjE)+,
cut_tac x = "v x" in aless_linear[of _ "0"], simp,
erule disjE,
frule_tac x = x in value_noninf_nonzero[of v], assumption+,
frule_tac x1 = x in value_of_inv[THEN sym, of v], assumption+)
apply (frule_tac x = "v x" in aless_minus[of _ "0"], simp,
cut_tac x = x in invf_closed1, simp, erule conjE,
frule valuation_map[of v],
frule_tac a = "x⇗‐ K⇖" in mem_in_image[of "v" "carrier K" "Z⇩∞"], simp)
apply (drule_tac a = "v (x⇗‐ K⇖)" in forall_spec, simp,
frule_tac x = "x⇗‐ K⇖" in val_nonzero_noninf[of v],
thin_tac "v (x⇗‐ K⇖) ∈ v ` carrier K",
thin_tac "{x ∈ v ` carrier K. 0 < x} ⊆ LBset 1",
thin_tac "AMin {x ∈ v ` carrier K. 0 < x} ∈ v ` carrier K",
thin_tac "0 < AMin {x ∈ v ` carrier K. 0 < x}", simp,
thin_tac "v (x⇗‐ K⇖) ∈ v ` carrier K",
thin_tac "{x ∈ v ` carrier K. 0 < x} ⊆ LBset 1",
thin_tac "AMin {x ∈ v ` carrier K. 0 < x} ∈ v ` carrier K",
thin_tac "0 < AMin {x ∈ v ` carrier K. 0 < x}", simp)
apply (rule noninf_mem_Z[of "AMin {x ∈ v ` carrier K. 0 < x}"],
frule image_sub[of v "carrier K" "Z⇩∞" "carrier K"],
rule subset_refl)
apply (rule subsetD[of "v ` carrier K" "Z⇩∞"
"AMin {x ∈ v ` carrier K. 0 < x}"], assumption+)
apply auto
by (metis (no_types, lifting) aneg_le aug_inf_noninf_is_z image_eqI value_in_aug_inf z_less_i)
lemma (in Corps) Lv_z:"valuation K v ⟹ ∃z. Lv K v = ant z"
by (simp add:Lv_def, rule AMin_z, assumption+)
lemma (in Corps) AMin_k:"valuation K v ⟹
∃k∈ carrier K - {𝟬}. AMin {x. x ∈ v ` carrier K ∧ 0 < x} = v k"
apply (frule vals_pos_nonempty[of v],
frule vals_pos_LBset[of v],
simp only:ant_1[THEN sym],
frule AMin[of "{x. x ∈ v ` carrier K ∧ 0 < x}" "1"], assumption+,
erule conjE)
apply (thin_tac "∀x∈{x. x ∈ v ` carrier K ∧ 0 < x}.
AMin {x. x ∈ v ` carrier K ∧ 0 < x} ≤ x")
apply (simp add:image_def, erule conjE, erule bexE,
thin_tac "{x. (∃xa∈carrier K. x = v xa) ∧ 0 < x} ⊆ LBset 1",
thin_tac "∃x. (∃xa∈carrier K. x = v xa) ∧ 0 < x",
subgoal_tac "x ∈ carrier K - {𝟬}", blast,
frule AMin_z[of v], erule exE, simp)
apply (simp add:image_def,
thin_tac "AMin {x. (∃xa∈carrier K. x = v xa) ∧ 0 < x} = ant a",
rule contrapos_pp, simp+, frule sym, thin_tac "v (𝟬) = ant a",
simp add:value_of_zero)
done
lemma (in Corps) val_Pg:" valuation K v ⟹
Pg K v ∈ carrier K - {𝟬} ∧ v (Pg K v) = Lv K v"
apply (frule AMin_k[of v], unfold Lv_def, unfold Pg_def)
apply (rule someI2_ex)
apply (erule bexE, drule sym, unfold Lv_def, blast)
apply simp
done
lemma (in Corps) amin_generateTr:"valuation K v ⟹
∀w∈carrier K - {𝟬}. ∃z. v w = z *⇩a AMin {x. x ∈ v ` carrier K ∧ 0 < x}"
apply (frule vals_pos_nonempty[of v],
frule vals_pos_LBset[of v],
simp only:ant_1[THEN sym],
frule AMin[of "{x. x ∈ v ` carrier K ∧ 0 < x}" "1"], assumption+,
frule AMin_z[of v], erule exE, simp,
thin_tac "∃x. x ∈ v ` carrier K ∧ 0 < x",
(erule conjE)+, rule ballI, simp, erule conjE,
frule_tac x = w in val_nonzero_noninf[of v], assumption+,
frule_tac x = w in value_in_aug_inf[of v], assumption+,
simp add:aug_inf_def,
cut_tac a = "v w" in mem_ant, simp, erule exE,
cut_tac a = z and b = a in amod_adiv_equality)
apply (case_tac "z mod a = 0", simp add:ant_0 aadd_0_r, blast,
thin_tac "{x. x ∈ v ` carrier K ∧ 0 < x} ⊆ LBset 1",
thin_tac "v w ≠ ∞", thin_tac "v w ≠ - ∞")
apply (frule AMin_k[of v], erule bexE,
drule sym,
drule sym,
drule sym,
rotate_tac -1, drule sym)
apply (cut_tac z = z in z_in_aug_inf,
cut_tac z = "(z div a)" and x = a in asp_z_Z,
cut_tac z = "z mod a" in z_in_aug_inf,
frule_tac a = "ant z" and b = "(z div a) *⇩a ant a" and
c = "ant (z mod a)" in ant_sol, assumption+,
subst asprod_mult, simp, assumption, simp,
frule_tac x = k and z = "z div a" in val_exp[of v],
(erule conjE)+, assumption, simp, simp,
thin_tac "(z div a) *⇩a v k = v (k⇘K⇙⇗(z div a)⇖)",
erule conjE)
apply (frule_tac x = k and n = "z div a" in field_potent_nonzero1,
assumption+,
frule_tac a = k and n = "z div a" in npowf_mem, assumption,
frule_tac x1 = "k⇘K⇙⇗(z div a)⇖" in value_of_inv[THEN sym, of v], assumption+,
simp add:diff_ant_def,
thin_tac "- v (k⇘K⇙⇗(z div a)⇖) = v ((k⇘K⇙⇗(z div a)⇖)⇗‐ K⇖)",
cut_tac x = "k⇘K⇙⇗(z div a)⇖" in invf_closed1, simp,
simp, erule conjE,
frule_tac x1 = w and y1 = "(k⇘K⇙⇗(z div a)⇖)⇗‐ K⇖" in
val_t2p[THEN sym, of v], assumption+, simp,
cut_tac field_is_ring,
thin_tac "v w + v ((k⇘K⇙⇗(z div a)⇖)⇗‐ K⇖) = ant (z mod a)",
thin_tac "v (k⇘K⇙⇗(z div a)⇖) + ant (z mod a) = v w",
frule_tac x = w and y = "(k⇘K⇙⇗(z div a)⇖)⇗‐ K⇖" in
Ring.ring_tOp_closed[of "K"], assumption+)
apply (frule valuation_map[of v],
frule_tac a = "w ⋅⇩r (k⇘K⇙⇗(z div a)⇖)⇗‐ K⇖" in mem_in_image[of "v"
"carrier K" "Z⇩∞"], assumption+, simp)
apply (thin_tac "AMin {x. x ∈ v ` carrier K ∧ 0 < x} = v k",
thin_tac "v ∈ carrier K → Z⇩∞",
subgoal_tac "0 < v (w ⋅⇩r (k⇘K⇙⇗(z div a)⇖)⇗‐ K⇖ )",
drule_tac a = "v (w ⋅⇩r (k⇘K⇙⇗(z div a)⇖)⇗‐ K⇖)" in forall_spec,
simp add:image_def)
apply (drule sym, simp)
apply (frule_tac b = a and a = z in pos_mod_conj, erule conjE,
simp, simp,
frule_tac b = a and a = z in pos_mod_conj, erule conjE, simp)
done
lemma (in Corps) val_principalTr1:"⟦ valuation K v⟧ ⟹
Lv K v ∈ v ` (carrier K - {𝟬}) ∧
(∀w∈v ` carrier K. ∃a. w = a * Lv K v) ∧ 0 < Lv K v"
apply (rule conjI,
frule val_Pg[of v], erule conjE,
simp add:image_def, frule sym, thin_tac "v (Pg K v) = Lv K v",
erule conjE, blast)
apply (rule conjI,
rule ballI, simp add:image_def, erule bexE)
apply (
frule_tac x = x in value_in_aug_inf[of v], assumption,
frule sym, thin_tac "w = v x", simp add:aug_inf_def,
cut_tac a = w in mem_ant, simp, erule disjE, erule exE,
frule_tac x = x in value_noninf_nonzero[of v], assumption+,
simp, frule amin_generateTr[of v])
apply (drule_tac x = x in bspec, simp,
erule exE,
frule AMin_z[of v], erule exE, simp add:Lv_def,
simp add:asprod_mult, frule sym, thin_tac "za * a = z",
simp, subst a_z_z[THEN sym], blast)
apply (simp add:Lv_def,
frule AMin_z[of v], erule exE, simp,
frule Lv_pos[of v], simp add:Lv_def,
frule_tac m1 = a in a_i_pos[THEN sym], blast,
simp add:Lv_pos)
done
lemma (in Corps) val_principalTr2:"⟦valuation K v;
c ∈ v ` (carrier K - {𝟬}) ∧ (∀w∈v ` carrier K. ∃a. w = a * c) ∧ 0 < c;
d ∈ v ` (carrier K - {𝟬}) ∧ (∀w∈v ` carrier K. ∃a. w = a * d) ∧ 0 < d⟧
⟹ c = d"
apply ((erule conjE)+,
drule_tac x = d in bspec,
simp add:image_def, erule bexE, blast,
drule_tac x = c in bspec,
simp add:image_def, erule bexE, blast)
apply ((erule exE)+,
drule sym, simp,
simp add:image_def, (erule bexE)+, simp,
(erule conjE)+,
frule_tac x = x in val_nonzero_z[of v], assumption+, erule exE,
frule_tac x = xa in val_nonzero_z[of v], assumption+, erule exE,
simp) apply (
subgoal_tac "a ≠ ∞ ∧ a ≠ -∞", subgoal_tac "aa ≠ ∞ ∧ aa ≠ -∞",
cut_tac a = a in mem_ant, cut_tac a = aa in mem_ant, simp,
(erule exE)+, simp add:a_z_z,
thin_tac "c = ant z", frule sym, thin_tac "zb * z = za", simp)
apply (subgoal_tac "0 < zb",
cut_tac a = zc and b = zb in mult.commute, simp,
simp add:pos_zmult_eq_1_iff,
rule contrapos_pp, simp+,
cut_tac x = 0 and y = zb in less_linear, simp,
thin_tac "¬ 0 < zb",
erule disjE, simp,
frule_tac i = 0 and j = z and k = zb in zmult_zless_mono_neg,
assumption+, simp add:mult.commute)
apply (rule contrapos_pp, simp+, thin_tac "a ≠ ∞ ∧ a ≠ - ∞",
erule disjE, simp, rotate_tac 5, drule sym,
simp, simp, rotate_tac 5, drule sym, simp)
apply (rule contrapos_pp, simp+,
erule disjE, simp, rotate_tac 4,
drule sym, simp, simp,
rotate_tac 4, drule sym,
simp)
done
lemma (in Corps) val_principal:"valuation K v ⟹
∃!x0. x0 ∈ v ` (carrier K - {𝟬}) ∧
(∀w ∈ v ` (carrier K). ∃(a::ant). w = a * x0) ∧ 0 < x0"
by (rule ex_ex1I,
frule val_principalTr1[of v], blast,
rule_tac c = x0 and d = y in val_principalTr2[of v],
assumption+)
lemma (in Corps) n_val_defTr:"⟦valuation K v; w ∈ carrier K⟧ ⟹
∃!a. a * Lv K v = v w"
apply (rule ex_ex1I,
frule AMin_k[of v],
frule Lv_pos[of v], simp add:Lv_def,
erule bexE,
frule_tac x = k in val_nonzero_z[of v], simp, simp,
erule exE, simp, (erule conjE)+)
apply (case_tac "w = 𝟬⇘K⇙", simp add:value_of_zero,
frule_tac m = z in a_i_pos, blast)
apply (frule amin_generateTr[of v],
drule_tac x = w in bspec, simp, simp)
apply (
erule exE, simp add:asprod_mult,
subst a_z_z[THEN sym], blast)
apply (frule AMin_k[of v]) apply (erule bexE,
frule Lv_pos[of v], simp add:Lv_def) apply (
erule conjE,
frule_tac x = k in val_nonzero_z[of v], assumption+,
erule exE, simp) apply (
case_tac "w = 𝟬⇘K⇙", simp del:a_i_pos add:value_of_zero,
subgoal_tac "y = ∞", simp, rule contrapos_pp, simp+,
cut_tac a = a in mem_ant, simp,
erule disjE, simp, erule exE, simp add:a_z_z)
apply (rule contrapos_pp, simp+,
cut_tac a = y in mem_ant, simp, erule disjE, simp,
erule exE, simp add:a_z_z,
frule_tac x = w in val_nonzero_z[of v], assumption+,
erule exE, simp, cut_tac a = a in mem_ant,
erule disjE, simp, frule sym, thin_tac "- ∞ = ant za", simp,
erule disjE, erule exE, simp add:a_z_z)
apply (cut_tac a = y in mem_ant,
erule disjE, simp, rotate_tac 3, drule sym,
simp, erule disjE, erule exE, simp add:a_z_z, frule sym,
thin_tac "zb * z = za", simp, simp,
rotate_tac 3, drule sym,
simp, simp, frule sym, thin_tac "∞ = ant za", simp)
done
lemma (in Corps) n_valTr:"⟦ valuation K v; x ∈ carrier K⟧ ⟹
(THE l. (l * (Lv K v)) = v x)*(Lv K v) = v x"
by (rule theI', rule n_val_defTr, assumption+)
lemma (in Corps) n_val:"⟦valuation K v; x ∈ carrier K⟧ ⟹
(n_val K v x)*(Lv K v) = v x"
by (frule n_valTr[of v x], assumption+, simp add:n_val_def)
lemma (in Corps) val_pos_n_val_pos:"⟦valuation K v; x ∈ carrier K⟧ ⟹
(0 ≤ v x) = (0 ≤ n_val K v x)"
apply (frule n_val[of v x], assumption+,
drule sym,
frule Lv_pos[of v],
frule Lv_z[of v], erule exE, simp)
apply (frule_tac w = z and x = 0 and y = "n_val K v x" in amult_pos_mono_r,
simp add:amult_0_l)
done
lemma (in Corps) n_val_in_aug_inf:"⟦valuation K v; x ∈ carrier K⟧ ⟹
n_val K v x ∈ Z⇩∞"
apply (cut_tac field_is_ring, frule Ring.ring_zero[of "K"],
frule Lv_pos[of v],
frule Lv_z[of v], erule exE,
simp add:aug_inf_def)
apply (rule contrapos_pp, simp+)
apply (case_tac "x = 𝟬⇘K⇙", simp,
frule n_val[of v "𝟬"],
simp add:value_of_zero, simp add:value_of_zero)
apply (frule n_val[of v x], simp,
frule val_nonzero_z[of v x], assumption+,
erule exE, simp, rotate_tac -2, drule sym,
simp)
done
lemma (in Corps) n_val_0:"⟦valuation K v; x ∈ carrier K; v x = 0⟧
⟹ n_val K v x = 0"
by (frule Lv_z[of v], erule exE,
frule Lv_pos[of v],
frule n_val[of v x], simp, simp,
rule_tac z = z and a = "n_val K v x" in a_a_z_0, assumption+)
lemma (in Corps) value_n0_n_val_n0:"⟦valuation K v; x ∈ carrier K; v x ≠ 0⟧ ⟹
n_val K v x ≠ 0"
apply (frule n_val[of v x],
rule contrapos_pp, simp+, frule Lv_z[of v],
erule exE, simp, simp only:ant_0[THEN sym])
apply (rule contrapos_pp, simp+,
simp add:a_z_z)
done
lemma (in Corps) val_0_n_val_0:"⟦valuation K v; x ∈ carrier K⟧ ⟹
(v x = 0) = (n_val K v x = 0)"
apply (rule iffI,
simp add:n_val_0)
apply (rule contrapos_pp, simp+,
frule value_n0_n_val_n0[of v x], assumption+)
apply simp
done
lemma (in Corps) val_noninf_n_val_noninf:"⟦valuation K v; x ∈ carrier K⟧ ⟹
(v x ≠ ∞) = (n_val K v x ≠ ∞)"
by (frule Lv_z[of v], erule exE,
frule Lv_pos[of v], simp,
frule n_val[THEN sym, of v x],simp, simp,
thin_tac "v x = n_val K v x * ant z",
rule iffI, rule contrapos_pp, simp+,
cut_tac mem_ant[of "n_val K v x"], erule disjE, simp,
erule disjE, erule exE, simp add:a_z_z, simp, simp)
lemma (in Corps) val_inf_n_val_inf:"⟦valuation K v; x ∈ carrier K⟧ ⟹
(v x = ∞) = (n_val K v x = ∞)"
by (cut_tac val_noninf_n_val_noninf[of v x], simp, assumption+)
lemma (in Corps) val_eq_n_val_eq:"⟦valuation K v; x ∈ carrier K; y ∈ carrier K⟧
⟹ (v x = v y) = (n_val K v x = n_val K v y)"
apply (subst n_val[THEN sym, of v x], assumption+,
subst n_val[THEN sym, of v y], assumption+,
frule Lv_pos[of v], frule Lv_z[of v], erule exE, simp,
frule_tac s = z in zless_neq[THEN not_sym, of "0"])
apply (rule iffI)
apply (rule_tac z = z in amult_eq_eq_r[of _ "n_val K v x" "n_val K v y"],
assumption+)
apply simp
done
lemma (in Corps) val_poss_n_val_poss:"⟦valuation K v; x ∈ carrier K⟧ ⟹
(0 < v x) = (0 < n_val K v x)"
apply (simp add:less_le,
frule val_pos_n_val_pos[of v x], assumption+,
rule iffI, erule conjE, simp,
simp add:value_n0_n_val_n0[of v x])
apply (drule sym,
erule conjE, simp,
frule_tac val_0_n_val_0[THEN sym, of v x], assumption+,
simp)
done
lemma (in Corps) n_val_Pg:"valuation K v ⟹ n_val K v (Pg K v) = 1"
apply (frule val_Pg[of v], simp, (erule conjE)+,
frule n_val[of v "Pg K v"], simp, frule Lv_z[of v], erule exE, simp,
frule Lv_pos[of v], simp, frule_tac i = 0 and j = z in zless_neq)
apply (rotate_tac -1, frule not_sym, thin_tac "0 ≠ z",
subgoal_tac "n_val K v (Pg K v) * ant z = 1 * ant z",
rule_tac z = z in adiv_eq[of _ "n_val K v (Pg K v)" "1"], assumption+,
simp add:amult_one_l)
done
lemma (in Corps) n_val_valuationTr1:"valuation K v ⟹
∀x∈carrier K. n_val K v x ∈ Z⇩∞"
by (rule ballI,
frule n_val[of v], assumption,
frule_tac x = x in value_in_aug_inf[of v], assumption,
frule Lv_pos[of v], simp add:aug_inf_def,
frule Lv_z[of v], erule exE, simp,
rule contrapos_pp, simp+)
lemma (in Corps) n_val_t2p:"⟦valuation K v; x ∈ carrier K; y ∈ carrier K⟧ ⟹
n_val K v (x ⋅⇩r y) = n_val K v x + (n_val K v y)"
apply (cut_tac field_is_ring,
frule Ring.ring_tOp_closed[of K x y], assumption+,
frule n_val[of v "x ⋅⇩r y"], assumption+,
frule Lv_pos[of "v"],
simp add:val_t2p,
frule n_val[THEN sym, of v x], assumption+,
frule n_val[THEN sym, of v y], assumption+, simp,
frule Lv_z[of v], erule exE, simp)
apply (subgoal_tac "ant z ≠ 0")
apply (frule_tac z1 = z in amult_distrib1[THEN sym, of _ "n_val K v x"
"n_val K v y"], simp,
thin_tac "n_val K v x * ant z + n_val K v y * ant z =
(n_val K v x + n_val K v y) * ant z",
rule_tac z = z and a = "n_val K v (x ⋅⇩r y)" and
b = "n_val K v x + n_val K v y" in adiv_eq, simp, assumption+, simp)
done
lemma (in Corps) n_val_valuationTr2:"⟦ valuation K v; x ∈ carrier K;
y ∈ carrier K⟧ ⟹
amin (n_val K v x) (n_val K v y) ≤ (n_val K v ( x ± y))"
apply (frule n_val[THEN sym, of v x], assumption+,
frule n_val[THEN sym, of v y], assumption+,
frule n_val[THEN sym, of v "x ± y"],
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
rule aGroup.ag_pOp_closed, assumption+)
apply (frule amin_le_plus[of v x y], assumption+, simp,
simp add:amult_commute[of _ "Lv K v"],
frule Lv_z[of v], erule exE, simp,
frule Lv_pos[of v], simp,
simp add:amin_amult_pos, simp add:amult_pos_mono_l)
done
lemma (in Corps) n_val_valuation:"valuation K v ⟹
valuation K (n_val K v)"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag)
apply (frule Lv_z[of v], erule exE, frule Lv_pos[of v], simp,
subst valuation_def)
apply (rule conjI, simp add:n_val_def restrict_def extensional_def)
apply (rule conjI, simp add:n_val_valuationTr1)
apply (rule conjI, frule n_val[of v 𝟬],
simp add:Ring.ring_zero,
frule Lv_z[of v], erule exE, frule Lv_pos[of v],
cut_tac mem_ant[of "n_val K v (𝟬)"], erule disjE,
simp add:value_of_zero,
erule disjE, erule exE, simp add:a_z_z value_of_zero, assumption+)
apply (rule conjI, rule ballI,
frule_tac x = x in val_nonzero_noninf[of v], simp+,
simp add:val_noninf_n_val_noninf)
apply (rule conjI, (rule ballI)+, simp add:n_val_t2p,
rule conjI, rule ballI, rule impI,
frule Lv_z[of v], erule exE,
frule Lv_pos[of v], simp,
frule_tac x = x in n_val[of v], simp,
frule_tac w1 = z and x1 = 0 and y1 = "n_val K v x" in
amult_pos_mono_r[THEN sym], simp add:amult_0_l,
frule_tac x = x in val_axiom4[of v], assumption+,
frule_tac x1 = "1⇩r ± x" in n_val[THEN sym, of v],
frule Ring.ring_is_ag[of "K"],
rule aGroup.ag_pOp_closed, assumption+, simp add:Ring.ring_one,
assumption,
frule_tac w = z and x = 0 and y = "n_val K v (1⇩r ± x)"
in amult_pos_mono_r,
simp add:amult_0_l)
apply (frule val_axiom5[of v], erule exE,
(erule conjE)+,
frule_tac x = x in value_n0_n_val_n0[of v], assumption+,
frule_tac x = x in val_noninf_n_val_noninf, simp,
blast)
done
lemma (in Corps) n_val_le_val:"⟦valuation K v; x ∈ carrier K; 0 ≤ (v x)⟧ ⟹
(n_val K v x) ≤(v x)"
by (subst n_val[THEN sym, of v x], assumption+,
frule Lv_pos[of v],
simp add:val_pos_n_val_pos[of v x],
frule Lv_z[of v], erule exE,
cut_tac b = z and x = "n_val K v x" in amult_pos, simp+,
simp add:asprod_amult, simp add:amult_commute)
lemma (in Corps) n_val_surj:"valuation K v ⟹
∃x∈ carrier K. n_val K v x = 1"
apply (frule Lv_z[of v], erule exE,
frule Lv_pos[of v],
frule AMin_k[of v], erule bexE, frule_tac x = k in n_val[of v], simp,
simp add:Lv_def)
apply (subgoal_tac "n_val K v k * ant z = 1 * ant z",
subgoal_tac "z ≠ 0",
frule_tac z = z and a = "n_val K v k" and b = 1 in amult_eq_eq_r,
assumption, blast, simp, simp add:amult_one_l)
done
lemma (in Corps) n_value_in_aug_inf:"⟦valuation K v; x ∈ carrier K⟧ ⟹
n_val K v x ∈ Z⇩∞"
by (frule n_val[of v x], assumption,
simp add:aug_inf_def, rule contrapos_pp, simp+,
frule Lv_pos[of v], frule Lv_z[of v], erule exE, simp,
frule value_in_aug_inf[of v x], assumption+, simp add:aug_inf_def)
lemma (in Corps) val_surj_n_valTr:"⟦valuation K v; ∃x ∈ carrier K. v x = 1⟧
⟹ Lv K v = 1"
apply (erule bexE,
frule_tac x = x in n_val[of v],
simp, frule Lv_pos[of v])
apply (frule_tac w = "Lv K v" and x = "n_val K v x" in amult_1_both)
apply simp+
done
lemma (in Corps) val_surj_n_val:"⟦valuation K v; ∃x ∈ carrier K. v x = 1⟧ ⟹
(n_val K v) = v"
apply (rule funcset_eq[of _ "carrier K"],
simp add:n_val_def restrict_def extensional_def,
simp add:valuation_def)
apply (rule ballI,
frule val_surj_n_valTr[of v], assumption+,
frule_tac x = x in n_val[of v], assumption+,
simp add:amult_one_r)
done
lemma (in Corps) n_val_n_val:"valuation K v ⟹
n_val K (n_val K v) = n_val K v"
by (frule n_val_valuation[of v],
frule n_val_surj[of v],
simp add:val_surj_n_val)
lemma nnonzero_annonzero:"0 < N ⟹ an N ≠ 0"
apply (simp only:an_0[THEN sym])
apply (subst aneq_natneq, simp)
done
section "Valuation ring"
definition
Vr :: "[('r, 'm) Ring_scheme, 'r ⇒ ant] ⇒ ('r, 'm) Ring_scheme" where
"Vr K v = Sr K ({x. x ∈ carrier K ∧ 0 ≤ (v x)})"
definition
vp :: "[('r, 'm) Ring_scheme, 'r ⇒ ant] ⇒ 'r set" where
"vp K v = {x. x ∈ carrier (Vr K v) ∧ 0 < (v x)}"
definition
r_apow :: "[('r, 'm) Ring_scheme, 'r set, ant] ⇒ 'r set" where
"r_apow R I a = (if a = ∞ then {𝟬⇘R⇙} else
(if a = 0 then carrier R else I⇗♢R (na a)⇖))"
abbreviation
RAPOW ("(3_⇗ _ _⇖)" [62,62,63]62) where
"I⇗R a⇖ == r_apow R I a"
lemma (in Ring) ring_pow_apow:"ideal R I ⟹
I⇗♢R n⇖ = I⇗R (an n)⇖"
apply (simp add:r_apow_def)
apply (case_tac "n = 0", simp)
apply (simp add:nnonzero_annonzero)
apply (simp add:an_neq_inf na_an)
done
lemma (in Ring) r_apow_Suc:"ideal R I ⟹ I⇗R (an (Suc 0))⇖ = I"
apply (cut_tac an_1, simp add:r_apow_def)
apply (simp add:a0_neq_1[THEN not_sym])
apply (simp only:ant_1[THEN sym])
apply (simp del:ant_1 add:z_neq_inf[of 1, THEN not_sym])
apply (simp add:na_1)
apply (simp add:idealprod_whole_r)
done
lemma (in Ring) apow_ring_pow:"ideal R I ⟹
I⇗♢R n⇖ = I⇗R (an n)⇖"
apply (simp add:r_apow_def)
apply (case_tac "n = 0", simp add:an_0)
apply (simp add: aless_nat_less[THEN sym],
cut_tac an_neq_inf[of n],
simp add: less_le[of 0 "an n"] na_an)
done
lemma (in Corps) Vr_ring:"valuation K v ⟹ Ring (Vr K v)"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
simp add:Vr_def, rule Ring.Sr_ring, assumption+)
apply (simp add:sr_def)
apply (intro conjI subsetI)
apply (simp_all add: value_of_one Ring.ring_one[of "K"])
apply ((rule allI, rule impI)+,
(erule conjE)+, rule conjI, rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+)
apply (frule_tac x = x and y = "-⇩a y" in amin_le_plus[of v], assumption+,
rule aGroup.ag_mOp_closed, assumption+,
simp add:val_minus_eq[of v]) apply (
frule_tac z = 0 and x = "v x" and y = "v y" in amin_ge1, assumption+,
frule_tac i = 0 and j = "amin (v x) (v y)" and k = "v (x ± -⇩a y)" in
ale_trans, assumption+, simp)
by (simp add: Ring.ring_tOp_closed aadd_two_pos val_t2p)
lemma (in Corps) val_pos_mem_Vr:"⟦valuation K v; x ∈ carrier K⟧ ⟹
(0 ≤ (v x)) = (x ∈ carrier (Vr K v))"
by (rule iffI, (simp add:Vr_def Sr_def)+)
lemma (in Corps) val_poss_mem_Vr:"⟦valuation K v; x ∈ carrier K; 0 < (v x)⟧
⟹ x ∈ carrier (Vr K v)"
by (frule aless_imp_le[of "0" "v x"], simp add:val_pos_mem_Vr)
lemma (in Corps) Vr_one:"valuation K v ⟹ 1⇩r⇘K⇙ ∈ carrier (Vr K v)"
by (cut_tac field_is_ring, frule Ring.ring_one[of "K"],
frule val_pos_mem_Vr[of v "1⇩r"], assumption+,
simp add:value_of_one)
lemma (in Corps) Vr_mem_f_mem:"⟦valuation K v; x ∈ carrier (Vr K v)⟧
⟹ x ∈ carrier K"
by (simp add:Vr_def Sr_def)
lemma (in Corps) Vr_0_f_0:"valuation K v ⟹ 𝟬⇘Vr K v⇙ = 𝟬"
by (simp add:Vr_def Sr_def)
lemma (in Corps) Vr_1_f_1:"valuation K v ⟹ 1⇩r⇘(Vr K v)⇙ = 1⇩r"
by (simp add:Vr_def Sr_def)
lemma (in Corps) Vr_pOp_f_pOp:"⟦valuation K v; x ∈ carrier (Vr K v);
y ∈ carrier (Vr K v)⟧ ⟹ x ±⇘Vr K v⇙ y = x ± y"
by (simp add:Vr_def Sr_def)
lemma (in Corps) Vr_mOp_f_mOp:"⟦valuation K v; x ∈ carrier (Vr K v)⟧
⟹ -⇩a⇘(Vr K v)⇙ x = -⇩a x"
by (simp add:Vr_def Sr_def)
lemma (in Corps) Vr_tOp_f_tOp:"⟦valuation K v; x ∈ carrier (Vr K v);
y ∈ carrier(Vr K v)⟧ ⟹ x ⋅⇩r⇘(Vr K v)⇙ y = x ⋅⇩r y"
by (simp add:Vr_def Sr_def)
lemma (in Corps) Vr_pOp_le:"⟦valuation K v; x ∈ carrier K;
y ∈ carrier (Vr K v)⟧ ⟹ v x ≤ (v x + (v y))"
apply (frule val_pos_mem_Vr[THEN sym, of v y],
simp add:Vr_mem_f_mem, simp, frule aadd_pos_le[of "v y" "v x"],
simp add:aadd_commute)
done
lemma (in Corps) Vr_integral:"valuation K v ⟹ Idomain (Vr K v)"
apply (simp add:Idomain_def,
simp add:Vr_ring, simp add:Idomain_axioms_def,
rule allI, rule impI, rule allI, (rule impI)+,
simp add:Vr_tOp_f_tOp, simp add:Vr_0_f_0)
apply (rule contrapos_pp, simp+, erule conjE,
cut_tac field_is_idom,
frule_tac x = a in Vr_mem_f_mem[of v], assumption,
frule_tac x = b in Vr_mem_f_mem[of v], assumption,
frule_tac x = a and y = b in Idomain.idom_tOp_nonzeros[of "K"],
assumption+, simp)
done
lemma (in Corps) Vr_exp_mem:"⟦valuation K v; x ∈ carrier (Vr K v)⟧
⟹ x^⇗K n⇖ ∈ carrier (Vr K v)"
by (frule Vr_ring[of v],
induct_tac n, simp add:Vr_one,
simp add:Vr_tOp_f_tOp[THEN sym, of v],
simp add:Ring.ring_tOp_closed)
lemma (in Corps) Vr_exp_f_exp:"⟦valuation K v; x ∈ carrier (Vr K v)⟧ ⟹
x^⇗(Vr K v) n⇖ = x^⇗K n⇖"
apply (induct_tac n,
simp, simp add:Vr_1_f_1, simp,
thin_tac "x^⇗(Vr K v) n⇖ = x^⇗K n⇖")
apply (rule Vr_tOp_f_tOp, assumption+,
simp add:Vr_exp_mem, assumption)
done
lemma (in Corps) Vr_potent_nonzero:"⟦valuation K v;
x ∈ carrier (Vr K v) - {𝟬⇘Vr K v⇙}⟧ ⟹ x^⇗K n⇖ ≠ 𝟬⇘Vr K v⇙"
apply (frule Vr_mem_f_mem[of v x], simp,
simp add:Vr_0_f_0, erule conjE)
apply (frule Vr_mem_f_mem[of v x], assumption+,
simp add:field_potent_nonzero)
done
lemma (in Corps) elem_0_val_if:"⟦valuation K v; x ∈ carrier K; v x = 0⟧
⟹ x ∈ carrier (Vr K v) ∧ x⇗‐ K⇖ ∈ carrier (Vr K v)"
apply (frule val_pos_mem_Vr[of v x], assumption, simp)
apply (frule value_zero_nonzero[of "v" "x"], simp add:Vr_mem_f_mem, simp)
apply (frule value_of_inv[of v x], assumption+,
simp, subst val_pos_mem_Vr[THEN sym, of v "x⇗‐K⇖"], assumption+,
cut_tac invf_closed[of x], simp+)
done
lemma (in Corps) elem0val:"⟦valuation K v; x ∈ carrier K; x ≠ 𝟬⟧ ⟹
(v x = 0) = ( x ∈ carrier (Vr K v) ∧ x⇗‐ K⇖ ∈ carrier (Vr K v))"
apply (rule iffI, rule elem_0_val_if[of v], assumption+,
erule conjE)
apply (simp add:val_pos_mem_Vr[THEN sym, of v x],
frule Vr_mem_f_mem[of v "x⇗‐K⇖"], assumption+,
simp add:val_pos_mem_Vr[THEN sym, of v "x⇗‐K⇖"],
simp add:value_of_inv, frule ale_minus[of "0" "- v x"],
simp add:a_minus_minus)
done
lemma (in Corps) ideal_inc_elem0val_whole:"⟦ valuation K v; x ∈ carrier K;
v x = 0; ideal (Vr K v) I; x ∈ I⟧ ⟹ I = carrier (Vr K v)"
apply (frule elem_0_val_if[of v x], assumption+, erule conjE,
frule value_zero_nonzero[of v x], assumption+,
frule Vr_ring[of v],
frule_tac I = I and x = x and r = "x⇗‐K⇖" in
Ring.ideal_ring_multiple[of "Vr K v"], assumption+,
cut_tac invf_closed1[of x], simp+, (erule conjE)+)
apply (simp add:Vr_tOp_f_tOp, cut_tac invf_inv[of x], simp+,
simp add: Vr_1_f_1[THEN sym, of v],
simp add:Ring.ideal_inc_one, simp+)
done
lemma (in Corps) vp_mem_Vr_mem:"⟦valuation K v; x ∈ (vp K v)⟧ ⟹
x ∈ carrier (Vr K v)"
by (rule val_poss_mem_Vr[of v x], assumption+, (simp add:vp_def
Vr_def Sr_def)+)
lemma (in Corps) vp_mem_val_poss:"⟦ valuation K v; x ∈ carrier K⟧ ⟹
(x ∈ vp K v) = (0 < (v x))"
by (simp add:vp_def, simp add:Vr_def Sr_def less_ant_def)
lemma (in Corps) Pg_in_Vr:"valuation K v ⟹ Pg K v ∈ carrier (Vr K v)"
by (frule val_Pg[of v], erule conjE,
frule Lv_pos[of v], drule sym,
simp, erule conjE,
simp add:val_poss_mem_Vr)
lemma (in Corps) vp_ideal:"valuation K v ⟹ ideal (Vr K v) (vp K v)"
apply (cut_tac field_is_ring,
frule Vr_ring[of v],
rule Ring.ideal_condition1, assumption+,
rule subsetI, simp add:vp_mem_Vr_mem,
simp add:vp_def)
apply (frule val_Pg[of v],
frule Lv_pos[of v], simp, (erule conjE)+,
drule sym, simp,
frule val_poss_mem_Vr[of v "Pg K v"], assumption+, blast)
apply ((rule ballI)+,
frule_tac x = x in vp_mem_Vr_mem[of v], assumption) apply (
frule_tac x = y in vp_mem_Vr_mem[of v], assumption,
simp add:vp_def,
frule Ring.ring_is_ag[of "Vr K v"],
frule_tac x = x and y = y in aGroup.ag_pOp_closed, assumption+, simp)
apply (simp add:Vr_pOp_f_pOp,
cut_tac x = "v x" and y = "v y" in amin_le_l,
frule_tac x = x and y = y in amin_le_plus,
(simp add:Vr_mem_f_mem)+,
(frule_tac z = 0 and x = "v x" and y = "v y" in amin_gt, assumption+),
rule_tac x = 0 and y = "amin (v x) (v y)" and z = "v (x ± y)" in
less_le_trans, assumption+)
apply ((rule ballI)+,
frule_tac x1 = r in val_pos_mem_Vr[THEN sym, of v],
simp add:Vr_mem_f_mem, simp,
frule_tac x = x in vp_mem_Vr_mem[of v], simp add:Vr_pOp_f_pOp,
simp add:vp_def, simp add:Ring.ring_tOp_closed,
simp add:Vr_tOp_f_tOp)
apply (frule_tac x = r in Vr_mem_f_mem[of v], assumption+,
frule_tac x = x in Vr_mem_f_mem[of v], assumption+,
simp add:val_t2p, simp add:aadd_pos_poss)
done
lemma (in Corps) vp_not_whole:"valuation K v ⟹
(vp K v) ≠ carrier (Vr K v)"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Vr_ring[of v])
apply (rule contrapos_pp, simp+,
drule sym,
frule Ring.ring_one[of "Vr K v"], simp,
simp add:Vr_1_f_1,
frule Ring.ring_one[of "K"])
apply (simp only:vp_mem_val_poss[of v "1⇩r"],
simp add:value_of_one)
done
lemma (in Ring) elem_out_ideal_nonzero:"⟦ideal R I; x ∈ carrier R;
x ∉ I⟧ ⟹ x ≠ 𝟬⇘R⇙"
by (rule contrapos_pp, simp+, frule ideal_zero[of I],
simp)
lemma (in Corps) vp_prime:"valuation K v ⟹ prime_ideal (Vr K v) (vp K v)"
apply (simp add:prime_ideal_def, simp add:vp_ideal)
apply (rule conjI)
apply (rule contrapos_pp, simp+,
frule Vr_ring[of v],
frule vp_ideal[of v],
frule Ring.ideal_inc_one[of "Vr K v" "vp K v"], assumption+,
simp add:vp_not_whole[of v])
apply ((rule ballI)+, rule impI, rule contrapos_pp, simp+, (erule conjE)+,
frule Vr_ring[of v]) apply (
frule_tac x = x in Vr_mem_f_mem[of v], assumption) apply (
frule_tac x = y in Vr_mem_f_mem[of v], assumption) apply (
frule vp_ideal[of v],
frule_tac x = x in Ring.elem_out_ideal_nonzero[of "Vr K v" "vp K v"],
assumption+) apply (
frule_tac x = y in Ring.elem_out_ideal_nonzero[of "Vr K v" "vp K v"],
assumption+, simp add:Vr_0_f_0,
simp add:Vr_tOp_f_tOp) apply (
frule_tac x = "x ⋅⇩r y" in vp_mem_val_poss[of v],
cut_tac field_is_ring, simp add:Ring.ring_tOp_closed, simp)
apply (cut_tac field_is_ring,
frule_tac x = x and y = y in Ring.ring_tOp_closed, assumption+,
simp add:Ring.ring_tOp_closed[of "Vr K v"],
simp add:vp_def, simp add:aneg_less,
frule_tac x1 = x in val_pos_mem_Vr[THEN sym, of v], assumption+,
frule_tac x1 = y in val_pos_mem_Vr[THEN sym, of v], assumption+,
frule_tac P = "x ∈ carrier (Vr K v)" and Q = "0 ≤ v x" in eq_prop,
assumption,
frule_tac P = "y ∈ carrier (Vr K v)" and Q = "0 ≤ v y" in eq_prop,
assumption,
frule_tac x = "v x" and y = 0 in ale_antisym, assumption+,
frule_tac x = "v y" and y = 0 in ale_antisym, assumption+,
simp add:val_t2p aadd_0_l)
done
lemma (in Corps) vp_pow_ideal:"valuation K v ⟹
ideal (Vr K v) ((vp K v)⇗♢(Vr K v) n⇖)"
by (frule Vr_ring[of v], frule vp_ideal[of v],
simp add:Ring.ideal_pow_ideal)
lemma (in Corps) vp_apow_ideal:"⟦valuation K v; 0 ≤ n⟧ ⟹
ideal (Vr K v) ((vp K v)⇗(Vr K v) n⇖)"
apply (frule Vr_ring[of v])
apply (case_tac "n = 0",
simp add:r_apow_def, simp add:Ring.whole_ideal[of "Vr K v"])
apply (case_tac "n = ∞",
simp add:r_apow_def, simp add:Ring.zero_ideal)
apply (simp add:r_apow_def, simp add:vp_pow_ideal)
done
lemma (in Corps) mem_vp_apow_mem_Vr:"⟦valuation K v;
0 ≤ N; x ∈ vp K v ⇗(Vr K v) N⇖⟧ ⟹ x ∈ carrier (Vr K v)"
by (frule Vr_ring[of v], frule vp_apow_ideal[of v N], assumption,
simp add:Ring.ideal_subset)
lemma (in Corps) elem_out_vp_unit:"⟦valuation K v; x ∈ carrier (Vr K v);
x ∉ vp K v⟧ ⟹ v x = 0"
by (metis Vr_mem_f_mem ale_antisym aneg_le val_pos_mem_Vr vp_mem_val_poss)
lemma (in Corps) vp_maximal:"valuation K v ⟹
maximal_ideal (Vr K v) (vp K v)"
apply (frule Vr_ring[of v],
simp add:maximal_ideal_def, simp add:vp_ideal)
apply (frule vp_not_whole[of v],
rule conjI, rule contrapos_pp, simp+, frule vp_ideal[of v],
frule Ring.ideal_inc_one[of "Vr K v" "vp K v"], assumption+)
apply simp
apply (rule equalityI,
rule subsetI, simp, erule conjE,
case_tac "x = vp K v", simp, simp, rename_tac X)
apply (frule_tac A = X in sets_not_eq[of _ "vp K v"], assumption+,
erule bexE,
frule_tac I = X and h = a in Ring.ideal_subset[of "Vr K v"],
assumption+,
frule_tac x = a in elem_out_vp_unit[of v], assumption+)
apply (frule_tac x = a and I = X in ideal_inc_elem0val_whole [of v],
simp add:Vr_mem_f_mem, assumption+)
apply (rule subsetI, simp, erule disjE,
simp add:prime_ideal_def, simp add:vp_ideal,
simp add:Ring.whole_ideal, rule subsetI, simp add:vp_mem_Vr_mem)
done
lemma (in Corps) ideal_sub_vp:"⟦ valuation K v; ideal (Vr K v) I;
I ≠ carrier (Vr K v)⟧ ⟹ I ⊆ (vp K v)"
apply (frule Vr_ring[of v], rule contrapos_pp, simp+)
apply (simp add:subset_eq,
erule bexE)
apply (frule_tac h = x in Ring.ideal_subset[of "Vr K v" I], assumption+,
frule_tac x = x in elem_out_vp_unit[of v], assumption+,
frule_tac x = x in ideal_inc_elem0val_whole[of v _ I],
simp add:Vr_mem_f_mem, assumption+, simp)
done
lemma (in Corps) Vr_local:"⟦valuation K v; maximal_ideal (Vr K v) I⟧ ⟹
(vp K v) = I"
apply (frule Vr_ring[of v],
frule ideal_sub_vp[of v I], simp add:Ring.maximal_ideal_ideal)
apply (simp add:maximal_ideal_def,
frule conjunct2, fold maximal_ideal_def, frule conjunct1,
rule Ring.proper_ideal, assumption+,simp add:maximal_ideal_def, assumption)
apply (rule equalityI) prefer 2 apply assumption
apply (rule contrapos_pp, simp+,
frule sets_not_eq[of "vp K v" I], assumption+, erule bexE)
apply (frule_tac x = a in vp_mem_Vr_mem[of v],
frule Ring.maximal_ideal_ideal[of "Vr K v" "I"], assumption,
frule_tac x = a in Ring.elem_out_ideal_nonzero[of "Vr K v" "I"],
assumption+,
frule vp_ideal[of v], rule Ring.ideal_subset[of "Vr K v" "vp K v"],
assumption+)
apply (frule_tac a = a in Ring.principal_ideal[of "Vr K v"], assumption+,
frule Ring.maximal_ideal_ideal[of "Vr K v" I], assumption+,
frule_tac ?I2.0 = "Vr K v ♢⇩p a"in Ring.sum_ideals[of "Vr K v" "I"],
simp add:Ring.maximal_ideal_ideal, assumption,
frule_tac ?I2.0 = "Vr K v ♢⇩p a"in Ring.sum_ideals_la1[of "Vr K v" "I"],
assumption+,
frule_tac ?I2.0 = "Vr K v ♢⇩p a"in Ring.sum_ideals_la2[of "Vr K v" "I"],
assumption+,
frule_tac a = a in Ring.a_in_principal[of "Vr K v"], assumption+,
frule_tac A = "Vr K v ♢⇩p a" and B = "I ∓⇘(Vr K v)⇙ (Vr K v ♢⇩p a)"
and c = a in subsetD, assumption+)
thm Ring.sum_ideals_cont[of "Vr K v" "vp K v" I ]
apply (frule_tac B = "Vr K v ♢⇩p a" in Ring.sum_ideals_cont[of "Vr K v"
"vp K v" I], simp add:vp_ideal, assumption)
apply (frule_tac a = a in Ring.ideal_cont_Rxa[of "Vr K v" "vp K v"],
simp add:vp_ideal, assumption+)
apply (simp add:maximal_ideal_def, (erule conjE)+,
subgoal_tac "I ∓⇘(Vr K v)⇙ (Vr K v ♢⇩p a) ∈ {J. ideal (Vr K v) J ∧ I ⊆ J}",
simp, thin_tac "{J. ideal (Vr K v) J ∧ I ⊆ J} = {I, carrier (Vr K v)}")
apply (erule disjE, simp)
apply (cut_tac A = "carrier (Vr K v)" and B = "I ∓⇘Vr K v⇙ Vr K v ♢⇩p a" and
C = "vp K v" in subset_trans, simp, assumption,
frule Ring.ideal_subset1[of "Vr K v" "vp K v"], simp add:vp_ideal,
frule equalityI[of "vp K v" "carrier (Vr K v)"], assumption+,
frule vp_not_whole[of v], simp)
apply blast
done
lemma (in Corps) v_residue_field:"valuation K v ⟹
Corps ((Vr K v) /⇩r (vp K v))"
by (frule Vr_ring[of v],
rule Ring.residue_field_cd [of "Vr K v" "vp K v"], assumption+,
simp add:vp_maximal)
lemma (in Corps) Vr_n_val_Vr:"valuation K v ⟹
carrier (Vr K v) = carrier (Vr K (n_val K v))"
by (simp add:Vr_def Sr_def,
rule equalityI,
(rule subsetI, simp, erule conjE, simp add:val_pos_n_val_pos),
(rule subsetI, simp, erule conjE, simp add:val_pos_n_val_pos[THEN sym]))
section "Ideals in a valuation ring"
lemma (in Corps) Vr_has_poss_elem:"valuation K v ⟹
∃x∈carrier (Vr K v) - {𝟬⇘Vr K v⇙}. 0 < v x"
apply (frule val_Pg[of v], erule conjE,
frule Lv_pos[of v], drule sym,
subst Vr_0_f_0, assumption+)
apply (frule aeq_ale[of "Lv K v" "v (Pg K v)"],
frule aless_le_trans[of "0" "Lv K v" "v (Pg K v)"], assumption+,
frule val_poss_mem_Vr[of v "Pg K v"],
simp, assumption, blast)
done
lemma (in Corps) vp_nonzero:"valuation K v ⟹ vp K v ≠ {𝟬⇘Vr K v⇙}"
apply (frule Vr_has_poss_elem[of v], erule bexE,
simp, erule conjE,
frule_tac x1 = x in vp_mem_val_poss[THEN sym, of v],
simp add:Vr_mem_f_mem, simp, rule contrapos_pp, simp+)
done
lemma (in Corps) field_frac_mul:"⟦x ∈ carrier K; y ∈ carrier K; y ≠ 𝟬⟧
⟹ x = (x ⋅⇩r (y⇗‐K⇖)) ⋅⇩r y"
apply (cut_tac invf_closed[of y],
cut_tac field_is_ring,
simp add:Ring.ring_tOp_assoc,
subst linvf[of y], simp, simp add:Ring.ring_r_one[of K], simp)
done
lemma (in Corps) elems_le_val:"⟦valuation K v; x ∈ carrier K; y ∈ carrier K;
x ≠ 𝟬; v x ≤ (v y)⟧ ⟹ ∃r∈carrier (Vr K v). y = r ⋅⇩r x"
apply (frule ale_diff_pos[of "v x" "v y"], simp add:diff_ant_def,
simp add:value_of_inv[THEN sym, of v x],
cut_tac invf_closed[of "x"],
simp only:val_t2p[THEN sym, of v y "x⇗‐K⇖"])
apply (cut_tac field_is_ring,
frule_tac x = y and y = "x⇗‐K⇖" in Ring.ring_tOp_closed[of "K"],
assumption+,
simp add:val_pos_mem_Vr[of v "y ⋅⇩r (x⇗‐K⇖)"],
frule field_frac_mul[of y x], assumption+, blast)
apply simp
done
lemma (in Corps) val_Rxa_gt_a:"⟦valuation K v; x ∈ carrier (Vr K v) - {𝟬};
y ∈ carrier (Vr K v); y ∈ Rxa (Vr K v) x⟧ ⟹ v x ≤ (v y)"
apply (simp add:Rxa_def,
erule bexE,
simp add:Vr_tOp_f_tOp, (erule conjE)+,
frule_tac x = r in Vr_mem_f_mem[of v], assumption+,
frule_tac x = x in Vr_mem_f_mem[of v], assumption+)
apply (subst val_t2p, assumption+,
simp add:val_pos_mem_Vr[THEN sym, of v],
frule_tac y = "v r" in aadd_le_mono[of "0" _ "v x"],
simp add:aadd_0_l)
done
lemma (in Corps) val_Rxa_gt_a_1:"⟦valuation K v; x ∈ carrier (Vr K v);
y ∈ carrier (Vr K v); x ≠ 𝟬; v x ≤ (v y)⟧ ⟹ y ∈ Rxa (Vr K v) x"
apply (frule_tac x = x in Vr_mem_f_mem[of v], assumption+,
frule_tac x = y in Vr_mem_f_mem[of v], assumption+,
frule v_ale_diff[of v x y], assumption+,
cut_tac invf_closed[of x],
cut_tac field_is_ring, frule Ring.ring_tOp_closed[of K y "x⇗‐K⇖"],
assumption+)
apply (simp add:val_pos_mem_Vr[of "v" "y ⋅⇩r (x⇗‐K⇖)"],
frule field_frac_mul[of "y" "x"], assumption+,
simp add:Rxa_def, simp add:Vr_tOp_f_tOp, blast, simp)
done
lemma (in Corps) eqval_inv:"⟦valuation K v; x ∈ carrier K; y ∈ carrier K;
y ≠ 𝟬; v x = v y⟧ ⟹ 0 = v (x ⋅⇩r (y⇗‐K⇖))"
by (cut_tac invf_closed[of y],
simp add:val_t2p value_of_inv, simp add:aadd_minus_r,
simp)
lemma (in Corps) eq_val_eq_idealTr:"⟦valuation K v;
x ∈ carrier (Vr K v) - {𝟬}; y ∈ carrier (Vr K v); v x ≤ (v y)⟧ ⟹
Rxa (Vr K v) y ⊆ Rxa (Vr K v) x"
apply (frule val_Rxa_gt_a_1[of v x y], simp+,
erule conjE)
apply (frule_tac x = x in Vr_mem_f_mem[of v], assumption+,
frule Vr_ring[of v],
frule Ring.principal_ideal[of "Vr K v" "x"], assumption,
frule Ring.ideal_cont_Rxa[of "Vr K v" "(Vr K v) ♢⇩p x" "y"],
assumption+)
done
lemma (in Corps) eq_val_eq_ideal:"⟦valuation K v;
x ∈ carrier (Vr K v); y ∈ carrier (Vr K v); v x = v y⟧
⟹ Rxa (Vr K v) x = Rxa (Vr K v) y"
apply (case_tac "x = 𝟬⇘K⇙",
simp add:value_of_zero,
frule value_inf_zero[of v y],
simp add:Vr_mem_f_mem, rule sym, assumption, simp)
apply (rule equalityI,
rule eq_val_eq_idealTr[of v y x], assumption+,
drule sym, simp,
rule contrapos_pp, simp+, simp add:value_of_zero,
frule Vr_mem_f_mem[of v x], assumption+,
frule value_inf_zero[of v x], assumption+,
rule sym, assumption, simp, simp, simp)
apply (rule eq_val_eq_idealTr[of v x y], assumption+, simp,
assumption, rule aeq_ale, assumption+)
done
lemma (in Corps) eq_ideal_eq_val:"⟦valuation K v; x ∈ carrier (Vr K v);
y ∈ carrier (Vr K v); Rxa (Vr K v) x = Rxa (Vr K v) y⟧ ⟹ v x = v y"
apply (case_tac "x = 𝟬⇘K⇙", simp,
drule sym,
frule Vr_ring[of v],
frule Ring.a_in_principal[of "Vr K v" y], assumption+, simp,
thin_tac "Vr K v ♢⇩p y = Vr K v ♢⇩p (𝟬)", simp add:Rxa_def,
erule bexE, simp add:Vr_0_f_0[of v, THEN sym])
apply (simp add:Vr_tOp_f_tOp, simp add:Vr_0_f_0,
frule_tac x = r in Vr_mem_f_mem[of v], assumption+,
cut_tac field_is_ring, simp add:Ring.ring_times_x_0)
apply (frule Vr_ring[of v],
frule val_Rxa_gt_a[of v x y], simp,
simp)
apply (drule sym,
frule Ring.a_in_principal[of "Vr K v" "y"], simp, simp)
apply (frule val_Rxa_gt_a[of v y x],
simp, rule contrapos_pp, simp+,
frule Ring.a_in_principal[of "Vr K v" "x"], assumption+,
simp add:Rxa_def,
erule bexE, simp add:Vr_tOp_f_tOp, cut_tac field_is_ring,
frule_tac x = r in Vr_mem_f_mem[of v], assumption+,
simp add:Ring.ring_times_x_0, simp,
frule Ring.a_in_principal[of "Vr K v" "x"], assumption+, simp,
rule ale_antisym, assumption+)
done
lemma (in Corps) zero_val_gen_whole:
"⟦valuation K v; x ∈ carrier (Vr K v)⟧ ⟹
(v x = 0) = (Rxa (Vr K v) x = carrier (Vr K v))"
apply (frule Vr_mem_f_mem[of v x], assumption,
frule Vr_ring[of v])
apply (rule iffI,
frule Ring.principal_ideal[of "Vr K v" "x"], assumption+,
frule Ring.a_in_principal[of "Vr K v" "x"], assumption+,
rule ideal_inc_elem0val_whole[of v x "Vr K v ♢⇩p x"], assumption+,
frule Ring.ring_one[of "Vr K v"],
frule eq_set_inc[of "1⇩r⇘(Vr K v)⇙"
"carrier (Vr K v)" "Vr K v ♢⇩p x"], drule sym, assumption,
thin_tac "1⇩r⇘(Vr K v)⇙ ∈ carrier (Vr K v)",
thin_tac "Vr K v ♢⇩p x = carrier (Vr K v)")
apply (simp add:Rxa_def, erule bexE,
simp add:Vr_1_f_1, simp add:Vr_tOp_f_tOp,
frule value_of_one[of v], simp,
frule_tac x = r in Vr_mem_f_mem[of v], assumption+,
cut_tac field_is_ring, simp add:val_t2p,
simp add:val_pos_mem_Vr[THEN sym, of v],
rule contrapos_pp, simp+,
cut_tac less_le[THEN sym, of "0" "v x"], drule not_sym, simp,
frule_tac x = "v r" and y = "v x" in aadd_pos_poss, assumption+,
simp)
done
lemma (in Corps) elem_nonzeroval_gen_proper:"⟦ valuation K v;
x ∈ carrier (Vr K v); v x ≠ 0⟧ ⟹ Rxa (Vr K v) x ≠ carrier (Vr K v)"
apply (rule contrapos_pp, simp+)
apply (simp add: zero_val_gen_whole[THEN sym])
done
text‹We prove that Vr K v is a principal ideal ring›
definition
LI :: "[('r, 'm) Ring_scheme, 'r ⇒ ant, 'r set] ⇒ ant" where
"LI K v I = AMin (v ` I)"
definition
Ig :: "[('r, 'm) Ring_scheme, 'r ⇒ ant, 'r set] ⇒ 'r" where
"Ig K v I = (SOME x. x ∈ I ∧ v x = LI K v I)"
lemma (in Corps) val_in_image:"⟦valuation K v; ideal (Vr K v) I; x ∈ I⟧ ⟹
v x ∈ v ` I"
by (simp add:image_def, blast)
lemma (in Corps) I_vals_nonempty:"⟦valuation K v; ideal (Vr K v) I⟧ ⟹
v ` I ≠ {}"
by (frule Vr_ring[of v],
frule Ring.ideal_zero[of "Vr K v" "I"],
assumption+, rule contrapos_pp, simp+)
lemma (in Corps) I_vals_LBset:"⟦ valuation K v; ideal (Vr K v) I⟧ ⟹
v ` I ⊆ LBset 0"
apply (frule Vr_ring[of v],
rule subsetI, simp add:LBset_def, simp add:image_def)
apply (erule bexE,
frule_tac h = xa in Ring.ideal_subset[of "Vr K v" "I"], assumption+)
apply (frule_tac x1 = xa in val_pos_mem_Vr[THEN sym, of v],
simp add:Vr_mem_f_mem, simp)
done
lemma (in Corps) LI_pos:"⟦valuation K v; ideal (Vr K v) I⟧ ⟹ 0 ≤ LI K v I"
apply (simp add:LI_def,
frule I_vals_LBset[of v],
simp add:ant_0[THEN sym],
frule I_vals_nonempty[of v], simp only:ant_0)
apply (simp only:ant_0[THEN sym], frule AMin[of "v ` I" "0"], assumption,
erule conjE, frule subsetD[of "v ` I" "LBset (ant 0)" "AMin (v ` I)"],
assumption+, simp add:LBset_def)
done
lemma (in Corps) LI_poss:"⟦valuation K v; ideal (Vr K v) I;
I ≠ carrier (Vr K v)⟧ ⟹ 0 < LI K v I"
apply (subst less_le)
apply (simp add:LI_pos)
apply (rule contrapos_pp, simp+)
apply (simp add:LI_def,
frule I_vals_LBset[of v], assumption+,
simp add:ant_0[THEN sym],
frule I_vals_nonempty[of v], assumption+, simp only:ant_0)
apply (simp only:ant_0[THEN sym], frule AMin[of "v ` I" "0"], assumption,
erule conjE, frule subsetD[of "v ` I" "LBset (ant 0)" "AMin (v ` I)"],
assumption+, simp add:LBset_def)
apply (thin_tac "∀x∈I. ant 0 ≤ v x",
thin_tac "v ` I ⊆ {x. ant 0 ≤ x}", simp add:image_def,
erule bexE, simp add:ant_0)
apply (frule Vr_ring[of v],
frule_tac h = x in Ring.ideal_subset[of "Vr K v" "I"], assumption+,
frule_tac x = x in zero_val_gen_whole[of v], assumption+,
simp,
frule_tac a = x in Ring.ideal_cont_Rxa[of "Vr K v" "I"], assumption+,
simp, frule Ring.ideal_subset1[of "Vr K v" "I"], assumption+)
apply (frule equalityI[of "I" "carrier (Vr K v)"], assumption+, simp)
done
lemma (in Corps) LI_z:"⟦valuation K v; ideal (Vr K v) I; I ≠ {𝟬⇘Vr K v⇙}⟧ ⟹
∃z. LI K v I = ant z"
apply (frule Vr_ring[of v],
frule Ring.ideal_zero[of "Vr K v" "I"], assumption+,
cut_tac mem_ant[of "LI K v I"],
frule LI_pos[of v I], assumption,
erule disjE, simp,
cut_tac minf_le_any[of "0"],
frule ale_antisym[of "0" "-∞"], assumption+, simp)
apply (erule disjE, simp,
frule singleton_sub[of "𝟬⇘Vr K v⇙" "I"],
frule sets_not_eq[of "I" "{𝟬⇘Vr K v⇙}"], assumption+,
erule bexE, simp)
apply (simp add:LI_def,
frule I_vals_LBset[of v], assumption+,
simp only:ant_0[THEN sym],
frule I_vals_nonempty[of v], assumption+,
frule AMin[of "v ` I" "0"], assumption, erule conjE)
apply (frule_tac x = a in val_in_image[of v I], assumption+,
drule_tac x = "v a" in bspec, simp,
simp add:Vr_0_f_0,
frule_tac x = a in val_nonzero_z[of v],
simp add:Ring.ideal_subset Vr_mem_f_mem, assumption+,
erule exE, simp,
cut_tac x = "ant z" in inf_ge_any, frule_tac x = "ant z" in
ale_antisym[of _ "∞"], assumption+, simp)
done
lemma (in Corps) LI_k:"⟦valuation K v; ideal (Vr K v) I⟧ ⟹
∃k∈ I. LI K v I = v k"
by (simp add:LI_def,
frule I_vals_LBset[of v], assumption+,
simp only:ant_0[THEN sym],
frule I_vals_nonempty[of v], assumption+,
frule AMin[of "v ` I" "0"], assumption, erule conjE,
thin_tac "∀x∈v ` I. AMin (v ` I) ≤ x", simp add:image_def)
lemma (in Corps) LI_infinity:"⟦valuation K v; ideal (Vr K v) I⟧ ⟹
(LI K v I = ∞) = (I = {𝟬⇘Vr K v⇙})"
apply (frule Vr_ring[of v])
apply (rule iffI)
apply (rule contrapos_pp, simp+,
frule Ring.ideal_zero[of "Vr K v" "I"], assumption+,
frule singleton_sub[of "𝟬⇘Vr K v⇙" "I"],
frule sets_not_eq[of "I" "{𝟬⇘Vr K v⇙}"], assumption+,
erule bexE,
frule_tac h = a in Ring.ideal_subset[of "Vr K v" "I"], assumption+,
simp add:Vr_0_f_0,
frule_tac x = a in Vr_mem_f_mem[of v], assumption+,
frule_tac x = a in val_nonzero_z[of v], assumption+,
erule exE,
simp add:LI_def,
frule I_vals_LBset[of v], assumption+,
simp only:ant_0[THEN sym],
frule I_vals_nonempty[of v], assumption+,
frule AMin[of "v ` I" "0"], assumption, erule conjE)
apply (frule_tac h = a in Ring.ideal_subset[of "Vr K v" "I"], assumption+,
frule_tac x = a in val_in_image[of v I], assumption+,
drule_tac x = "v a" in bspec, simp)
apply (frule_tac x = a in val_nonzero_z[of v], assumption+,
erule exE, simp,
cut_tac x = "ant z" in inf_ge_any, frule_tac x = "ant z" in
ale_antisym[of _ "∞"], assumption+, simp)
apply (frule sym, thin_tac "I = {𝟬⇘Vr K v⇙}",
simp add:LI_def,
frule I_vals_LBset[of v], assumption+,
simp only:ant_0[THEN sym],
frule I_vals_nonempty[of v], assumption+,
frule AMin[of "v ` I" "0"], assumption, erule conjE,
drule sym, simp,
simp add:Vr_0_f_0 value_of_zero)
done
lemma (in Corps) val_Ig:"⟦valuation K v; ideal (Vr K v) I⟧ ⟹
(Ig K v I) ∈ I ∧ v (Ig K v I) = LI K v I"
by (simp add:Ig_def, rule someI2_ex,
frule LI_k[of v I], assumption+, erule bexE,
drule sym, blast, assumption)
lemma (in Corps) Ig_nonzero:"⟦valuation K v; ideal (Vr K v) I; I ≠ {𝟬⇘Vr K v⇙}⟧
⟹ (Ig K v I) ≠ 𝟬"
by (rule contrapos_pp, simp+,
frule LI_infinity[of v I], assumption+,
frule val_Ig[of v I], assumption+, erule conjE,
simp add:value_of_zero)
lemma (in Corps) Vr_ideal_npowf_closed:"⟦valuation K v; ideal (Vr K v) I;
x ∈ I; 0 < n⟧ ⟹ x⇘K⇙⇗n⇖ ∈ I"
by (simp add:npowf_def, frule Vr_ring[of v],
frule Ring.ideal_npow_closed[of "Vr K v" "I" "x" "nat n"], assumption+,
simp, frule Ring.ideal_subset[of "Vr K v" "I" "x"], assumption+,
simp add:Vr_exp_f_exp)
lemma (in Corps) Ig_generate_I:"⟦valuation K v; ideal (Vr K v) I⟧ ⟹
(Vr K v) ♢⇩p (Ig K v I) = I"
apply (frule Vr_ring[of v])
apply (case_tac "I = carrier (Vr K v)",
frule sym, thin_tac "I = carrier (Vr K v)",
frule Ring.ring_one[of "Vr K v"],
simp, simp add: Vr_1_f_1,
frule val_Ig[of v I], assumption+, erule conjE,
frule LI_pos[of v I], assumption+,
simp add: LI_def cong del: image_cong_simp,
frule I_vals_LBset[of v], assumption+,
simp only: ant_0[THEN sym],
frule I_vals_nonempty[of v], assumption+,
frule AMin[of "v ` I" "0"], assumption, erule conjE,
frule val_in_image[of v I "1⇩r"], assumption+,
drule_tac x = "v (1⇩r)" in bspec, assumption+,
simp add: value_of_one ant_0 cong del: image_cong_simp,
simp add: zero_val_gen_whole[of v "Ig K v I"])
apply (frule val_Ig[of v I], assumption+, (erule conjE)+,
frule Ring.ideal_cont_Rxa[of "Vr K v" "I" "Ig K v I"], assumption+,
rule equalityI, assumption+)
apply (case_tac "LI K v I = ∞",
frule LI_infinity[of v I], simp,
simp add:Rxa_def, simp add:Ring.ring_times_x_0,
frule Ring.ring_zero, blast)
apply (rule subsetI,
case_tac "v x = 0",
frule_tac x = x in Vr_mem_f_mem[of v],
simp add:Ring.ideal_subset,
frule_tac x = x in zero_val_gen_whole[of v],
simp add:Ring.ideal_subset, simp,
frule_tac a = x in Ring.ideal_cont_Rxa[of "Vr K v" "I"], assumption+,
simp, frule Ring.ideal_subset1[of "Vr K v" "I"], assumption,
frule equalityI[of "I" "carrier (Vr K v)"], assumption+, simp)
apply (simp add:LI_def,
frule I_vals_LBset[of v], assumption+,
simp only:ant_0[THEN sym],
frule I_vals_nonempty[of v], assumption+,
frule AMin[of "v ` I" "0"], assumption, erule conjE,
frule_tac x = "v x" in bspec,
frule_tac x = x in val_in_image[of v I], assumption+,
simp)
apply (drule_tac x = x in bspec, assumption,
frule_tac y = x in eq_val_eq_idealTr[of v "Ig K v I"],
simp add:Ring.ideal_subset,
rule contrapos_pp, simp+, simp add:value_of_zero,
simp add:Ring.ideal_subset, simp)
apply (frule_tac a = x in Ring.a_in_principal[of "Vr K v"],
simp add:Ring.ideal_subset, rule subsetD, assumption+)
done
lemma (in Corps) Pg_gen_vp:"valuation K v ⟹
(Vr K v) ♢⇩p (Pg K v) = vp K v"
apply (frule vp_ideal[of v],
frule Ig_generate_I[of v "vp K v"], assumption+,
frule vp_not_whole[of v],
frule eq_val_eq_ideal[of v "Ig K v (vp K v)" "Pg K v"],
frule val_Ig [of v "vp K v"], assumption+, erule conjE,
simp add:vp_mem_Vr_mem)
apply (frule val_Pg[of v], erule conjE,
frule Lv_pos[of v],
rotate_tac -2, drule sym, simp,
simp add:val_poss_mem_Vr)
apply (thin_tac "Vr K v ♢⇩p Ig K v (vp K v) = vp K v",
frule val_Pg[of v], erule conjE,
simp, frule val_Ig[of v "vp K v"], assumption+, erule conjE,
simp, thin_tac "v (Pg K v) = Lv K v",
thin_tac "Ig K v (vp K v) ∈ vp K v ∧ v (Ig K v (vp K v)) =
LI K v (vp K v)", simp add:LI_def Lv_def,
subgoal_tac "v ` vp K v = {x. x ∈ v ` carrier K ∧ 0 < x}",
simp)
apply (thin_tac "ideal (Vr K v) (vp K v)", thin_tac "Pg K v ∈ carrier K",
thin_tac "Pg K v ≠ 𝟬",
rule equalityI, rule subsetI,
simp add:image_def vp_def, erule exE, erule conjE,
(erule conjE)+,
frule_tac x = xa in Vr_mem_f_mem[of v], assumption+, simp, blast)
apply (rule subsetI, simp add:image_def vp_def, erule conjE, erule bexE, simp,
frule_tac x = xa in val_poss_mem_Vr[of v], assumption+,
cut_tac y = "v xa" in less_le[of "0"], simp, blast, simp)
done
lemma (in Corps) vp_gen_t:"valuation K v ⟹
∃t∈carrier (Vr K v). vp K v = (Vr K v) ♢⇩p t"
by (frule Pg_gen_vp[of v], frule Pg_in_Vr[of v], blast)
lemma (in Corps) vp_gen_nonzero:"⟦valuation K v; vp K v = (Vr K v) ♢⇩p t⟧ ⟹
t ≠ 𝟬⇘Vr K v⇙"
apply (rule contrapos_pp, simp+,
cut_tac Ring.Rxa_zero[of "Vr K v"], drule sym, simp,
simp add:vp_nonzero)
apply (simp add:Vr_ring)
done
lemma (in Corps) n_value_idealTr:"⟦valuation K v; 0 ≤ n⟧ ⟹
(vp K v) ⇗♢(Vr K v) n⇖ = Vr K v ♢⇩p ((Pg K v)^⇗(Vr K v) n⇖)"
apply (frule Vr_ring[of v],
frule Pg_gen_vp[THEN sym, of v],
simp add:vp_ideal,
frule val_Pg[of v], simp, (erule conjE)+)
apply (subst Ring.principal_ideal_n_pow[of "Vr K v" "Pg K v"
"Vr K v ♢⇩p Pg K v"], assumption+,
frule Lv_pos[of v], rotate_tac -2, frule sym,
thin_tac "v (Pg K v) = Lv K v", simp, simp add:val_poss_mem_Vr,
simp+)
done
lemma (in Corps) ideal_pow_vp:"⟦valuation K v; ideal (Vr K v) I;
I ≠ carrier (Vr K v); I ≠ {𝟬⇘Vr K v⇙}⟧ ⟹
I = (vp K v)⇗♢ (Vr K v) (na (n_val K v (Ig K v I)))⇖"
apply (frule Vr_ring[of v],
frule Ig_generate_I[of v I], assumption+)
apply (frule n_val[of v "Ig K v I"],
frule val_Ig[of v I], assumption+, erule conjE,
simp add:Ring.ideal_subset[of "Vr K v" "I" "Ig K v I"] Vr_mem_f_mem)
apply (frule val_Pg[of v], erule conjE,
rotate_tac -1, drule sym, simp,
frule Ig_nonzero[of v I], assumption+,
frule LI_pos[of v I], assumption+,
frule Lv_pos[of v],
frule val_Ig[of v I], assumption+, (erule conjE)+,
rotate_tac -1, drule sym, simp,
frule val_pos_n_val_pos[of v "Ig K v I"],
simp add:Ring.ideal_subset Vr_mem_f_mem,
simp)
apply (frule zero_val_gen_whole[THEN sym, of v "Ig K v I"],
simp add:Ring.ideal_subset,
simp, rotate_tac -1, drule not_sym,
cut_tac less_le[THEN sym, of "0" "v (Ig K v I)"], simp,
thin_tac "0 ≤ v (Ig K v I)",
frule Ring.ideal_subset[of "Vr K v" I "Ig K v I"], assumption+,
frule Vr_mem_f_mem[of v "Ig K v I"], assumption+,
frule val_poss_n_val_poss[of v "Ig K v I"], assumption+, simp)
apply (frule Ig_nonzero[of v I],
frule val_nonzero_noninf[of v "Ig K v I"], assumption+,
simp add:val_noninf_n_val_noninf[of v "Ig K v I"],
frule val_poss_mem_Vr[of v "Pg K v"], assumption+,
subst n_value_idealTr[of v "na (n_val K v (Ig K v I))"],
assumption+, simp add:na_def)
apply (frule eq_val_eq_ideal[of v "Ig K v I"
"(Pg K v)^⇗(Vr K v) (na (n_val K v (Ig K v I)))⇖"], assumption+,
rule Ring.npClose, assumption+,
simp add:Vr_exp_f_exp[of v "Pg K v"],
subst val_exp_ring[THEN sym, of v "Pg K v"
"na (n_val K v (Ig K v I))"], assumption+)
apply (frule Lv_z[of v], erule exE, simp,
rotate_tac 6, drule sym, simp,
subst asprod_amult,
simp add:val_poss_n_val_poss[of v "Ig K v I"],
frule val_nonzero_noninf[of v "Ig K v I"], assumption+,
frule val_noninf_n_val_noninf[of v "Ig K v I"], assumption+, simp,
rule aposs_na_poss[of "n_val K v (Ig K v I)"], assumption+)
apply (fold an_def)
apply (subst an_na[THEN sym, of "n_val K v (Ig K v I)"],
frule val_nonzero_noninf[of v "Ig K v I"], assumption+,
frule val_noninf_n_val_noninf[of v "Ig K v I"], assumption+, simp,
simp add:aless_imp_le, simp)
apply simp
done
lemma (in Corps) ideal_apow_vp:"⟦valuation K v; ideal (Vr K v) I⟧ ⟹
I = (vp K v)⇗ (Vr K v) (n_val K v (Ig K v I))⇖"
apply (frule Vr_ring[of v])
apply (case_tac "v (Ig K v I) = ∞",
frule val_Ig[of v I], assumption,
frule val_inf_n_val_inf[of v "Ig K v I"],
simp add:Ring.ideal_subset Vr_mem_f_mem, simp, simp add:r_apow_def,
simp add:LI_infinity[of v I])
apply (case_tac "v (Ig K v I) = 0",
frule val_0_n_val_0[of v "Ig K v I"],
frule val_Ig[of v I], assumption+, erule conjE,
simp add:Ring.ideal_subset Vr_mem_f_mem, simp,
frule val_Ig[of v I], assumption,
frule zero_val_gen_whole[of v "Ig K v I"],
simp add:Ring.ideal_subset, (erule conjE)+, simp,
frule Ring.ideal_cont_Rxa[of "Vr K v" "I" "Ig K v I"], assumption+)
apply (simp,
frule Ring.ideal_subset1[of "Vr K v" "I"], assumption+,
frule equalityI[of "I" "carrier (Vr K v)"], assumption+,
simp add:r_apow_def)
apply (frule val_noninf_n_val_noninf[of v "Ig K v I"],
frule val_Ig[of v I], assumption,
simp add:Ring.ideal_subset Vr_mem_f_mem, simp,
frule value_n0_n_val_n0[of v "Ig K v I"],
frule val_Ig[of v I], assumption,
simp add:Ring.ideal_subset Vr_mem_f_mem, assumption)
apply (simp add:r_apow_def,
rule ideal_pow_vp, assumption+,
frule elem_nonzeroval_gen_proper[of v "Ig K v I"],
frule val_Ig[of v I], assumption+, erule conjE,
simp add:Ring.ideal_subset, assumption, simp add:Ig_generate_I)
apply (frule val_Ig[of v I], assumption+, erule conjE, simp,
simp add:LI_infinity[of v I])
done
lemma (in Corps) ideal_apow_n_val:"⟦valuation K v; x ∈ carrier (Vr K v)⟧ ⟹
(Vr K v) ♢⇩p x = (vp K v)⇗(Vr K v) (n_val K v x)⇖"
apply (frule Vr_ring[of v],
frule Ring.principal_ideal[of "Vr K v" "x"], assumption+,
frule ideal_apow_vp[of v "Vr K v ♢⇩p x"], assumption+)
apply (frule val_Ig[of v "Vr K v ♢⇩p x"], assumption+, erule conjE,
frule Ring.ideal_subset[of "Vr K v" "Vr K v ♢⇩p x"
"Ig K v (Vr K v ♢⇩p x)"], assumption+,
frule Ig_generate_I[of v "Vr K v ♢⇩p x"], assumption+)
apply (frule eq_ideal_eq_val[of v "Ig K v (Vr K v ♢⇩p x)" x],
assumption+,
thin_tac "Vr K v ♢⇩p Ig K v (Vr K v ♢⇩p x) = Vr K v ♢⇩p x",
thin_tac "v (Ig K v (Vr K v ♢⇩p x)) = LI K v (Vr K v ♢⇩p x)",
frule n_val[THEN sym, of v x],
simp add:Vr_mem_f_mem, simp,
thin_tac "v x = n_val K v x * Lv K v",
frule n_val[THEN sym, of v "Ig K v (Vr K v ♢⇩p x)"],
simp add:Vr_mem_f_mem, simp,
thin_tac "v (Ig K v (Vr K v ♢⇩p x)) = n_val K v x * Lv K v")
apply (frule Lv_pos[of v],
frule Lv_z[of v], erule exE, simp,
frule_tac s = z in zless_neq[THEN not_sym, of "0"],
frule_tac z = z in adiv_eq[of _ "n_val K v (Ig K v (Vr K v ♢⇩p x))"
"n_val K v x"], assumption+, simp)
done
lemma (in Corps) t_gen_vp:"⟦valuation K v; t ∈ carrier K; v t = 1⟧ ⟹
(Vr K v) ♢⇩p t = vp K v"
proof -
assume a1:"valuation K v" and
a2:"t ∈ carrier K" and
a3:"v t = 1"
from a1 and a2 and a3 have h1:"t ∈ carrier (Vr K v)"
apply (cut_tac a0_less_1)
apply (rule val_poss_mem_Vr[of v t], assumption+, simp) done
from a1 and a2 and a3 have h2:"n_val K v = v"
apply (subst val_surj_n_val[of v]) apply assumption
apply blast apply simp done
from a1 and h1 have h3:"Vr K v ♢⇩p t = vp K v⇗ (Vr K v) (n_val K v t)⇖"
apply (simp add:ideal_apow_n_val[of v t]) done
from a1 and a3 and h2 and h3 show ?thesis
apply (simp add:r_apow_def)
apply (simp only:ant_1[THEN sym], simp only:ant_0[THEN sym])
apply (simp only:aeq_zeq, simp)
apply (cut_tac z_neq_inf[THEN not_sym, of "1"], simp)
apply (simp only:an_1[THEN sym]) apply (simp add:na_an)
apply (rule Ring.idealprod_whole_r[of "Vr K v" "vp K v"])
apply (simp add:Vr_ring)
apply (simp add:vp_ideal) done
qed
lemma (in Corps) t_vp_apow:"⟦valuation K v; t ∈ carrier K; v t = 1⟧ ⟹
(Vr K v) ♢⇩p (t^⇗(Vr K v) n⇖) = (vp K v)⇗(Vr K v) (an n)⇖"
proof -
assume a1:"valuation K v" and
a2:"t ∈ carrier K" and
a3:"v t = 1"
from a1 have h1:"Ring (Vr K v)" by (simp add:Vr_ring[of v])
from a1 and a2 and a3 have h2:"t ∈ carrier (Vr K v)"
apply (cut_tac a0_less_1)
apply (rule val_poss_mem_Vr) apply assumption+ apply simp done
from a1 and a2 and a3 and h1 and h2 show ?thesis
apply (subst Ring.principal_ideal_n_pow[THEN sym, of "Vr K v" t "vp K v" n])
apply assumption+
apply (simp add:t_gen_vp)
apply (simp add:r_apow_def)
apply (rule conjI, rule impI,
simp only:an_0[THEN sym], frule an_inj[of n 0], simp)
apply (rule impI)
apply (rule conjI, rule impI)
apply (simp add:an_def)
apply (rule impI, cut_tac an_nat_pos[of n], simp add:na_an)
done
qed
lemma (in Corps) nonzeroelem_gen_nonzero:"⟦valuation K v; x ≠ 𝟬;
x ∈ carrier (Vr K v)⟧ ⟹ Vr K v ♢⇩p x ≠ {𝟬⇘Vr K v⇙}"
by (frule Vr_ring[of v],
frule_tac a = x in Ring.a_in_principal[of "Vr K v"], assumption+,
rule contrapos_pp, simp+, simp add:Vr_0_f_0)
subsection "Amin lemma (in Corps)s "
lemma (in Corps) Amin_le_addTr:"valuation K v ⟹
(∀j ≤ n. f j ∈ carrier K) ⟶ Amin n (v ∘ f) ≤ (v (nsum K f n))"
apply (induct_tac n)
apply (rule impI, simp)
apply (rule impI,
simp,
frule_tac x = "Σ⇩e K f n" and y = "f (Suc n)" in amin_le_plus[of v],
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
cut_tac n = n in aGroup.nsum_mem[of K _ f], assumption,
rule allI, simp add:funcset_mem, assumption, simp)
apply (frule_tac z = "Amin n (λu. v (f u))" and z' = "v (Σ⇩e K f n)" and
w = "v (f (Suc n))" in amin_aminTr,
rule_tac i = "amin (Amin n (λu. v (f u))) (v (f (Suc n)))" and
j = "amin (v (Σ⇩e K f n)) (v (f (Suc n)))" and
k = "v (Σ⇩e K f n ± (f (Suc n)))" in ale_trans, assumption+)
done
lemma (in Corps) Amin_le_add:"⟦valuation K v; ∀j ≤ n. f j ∈ carrier K⟧ ⟹
Amin n (v ∘ f) ≤ (v (nsum K f n))"
by (frule Amin_le_addTr[of v n f], simp)
lemma (in Corps) value_ge_add:"⟦valuation K v; ∀j ≤ n. f j ∈ carrier K;
∀j ≤ n. z ≤ ((v ∘ f) j)⟧ ⟹ z ≤ (v (Σ⇩e K f n))"
apply (frule Amin_le_add[of v n f], assumption+,
cut_tac Amin_ge[of n "v ∘ f" z],
rule ale_trans, assumption+)
apply (rule allI, rule impI,
simp add:comp_def Zset_def,
rule value_in_aug_inf[of v], assumption+, simp+)
done
lemma (in Corps) Vr_ideal_powTr1:"⟦valuation K v; ideal (Vr K v) I;
I ≠ carrier (Vr K v); b ∈ I⟧ ⟹ b ∈ (vp K v)"
by (frule ideal_sub_vp[of v I], assumption+, simp add:subsetD)
section ‹pow of vp and ‹n_value› -- convergence --›
lemma (in Corps) n_value_x_1:"⟦valuation K v; 0 ≤ n;
x ∈ (vp K v) ⇗(Vr K v) n⇖⟧ ⟹ n ≤ (n_val K v x)"
apply ((case_tac "n = ∞", simp add:r_apow_def,
simp add:Vr_0_f_0, cut_tac field_is_ring,
frule Ring.ring_zero[of "K"], frule val_inf_n_val_inf[of v 𝟬],
assumption+, simp add:value_of_zero),
(case_tac "n = 0", simp add:r_apow_def,
subst val_pos_n_val_pos[THEN sym, of v x], assumption+,
simp add:Vr_mem_f_mem,
subst val_pos_mem_Vr[of v x], assumption+,
simp add:Vr_mem_f_mem, assumption,
simp add:r_apow_def, frule Vr_ring[of v],
frule vp_pow_ideal[of v "na n"],
frule Ring.ideal_subset[of "Vr K v" "(vp K v) ⇗♢(Vr K v) (na n)⇖" x],
assumption+, frule Vr_mem_f_mem[of v x], assumption+))
apply (case_tac "x = 𝟬⇘K⇙", simp,
frule value_of_zero[of v],
simp add:val_inf_n_val_inf,
simp add:n_value_idealTr[of v "na n"],
frule val_Pg[of v], erule conjE, simp, erule conjE,
frule Lv_pos[of v],
rotate_tac -4, frule sym, thin_tac "v (Pg K v) = Lv K v", simp,
frule val_poss_mem_Vr[of v "Pg K v"], assumption+,
frule val_Rxa_gt_a[of v "Pg K v^⇗(Vr K v) (na n)⇖" x],
frule Vr_integral[of v],
simp only:Vr_0_f_0[of v, THEN sym],
frule Idomain.idom_potent_nonzero[of "Vr K v" "Pg K v" "na n"],
assumption+, simp, simp add:Ring.npClose, assumption+)
apply (thin_tac "x ∈ Vr K v ♢⇩p (Pg K v^⇗(Vr K v) (na n)⇖)",
thin_tac "ideal (Vr K v) (Vr K v ♢⇩p (Pg K v^⇗(Vr K v) (na n)⇖))")
apply (simp add:Vr_exp_f_exp[of v "Pg K v"],
simp add:val_exp_ring[THEN sym, of v "Pg K v"],
simp add:n_val[THEN sym, of v x],
frule val_nonzero_z[of v "Pg K v"], assumption+,
erule exE, simp,
frule aposs_na_poss[of "n"], simp add: less_le,
simp add:asprod_amult,
frule_tac w = z in amult_pos_mono_r[of _ "ant (int (na n))"
"n_val K v x"], simp,
cut_tac an_na[of "n"], simp add:an_def, assumption+)
done
lemma (in Corps) n_value_x_1_nat:"⟦valuation K v; x ∈ (vp K v)⇗♢(Vr K v) n⇖ ⟧ ⟹
(an n) ≤ (n_val K v x)"
apply (cut_tac an_nat_pos[of "n"])
apply( frule n_value_x_1[of "v" "an n" "x"], assumption+)
apply (simp add:r_apow_def)
apply (case_tac "n = 0", simp, simp)
apply (cut_tac aless_nat_less[THEN sym, of "0" "n"])
apply simp
unfolding less_le
apply simp
apply (cut_tac an_neq_inf [of "n"])
apply simp
apply (simp add: na_an)
apply assumption
done
lemma (in Corps) n_value_x_2:"⟦valuation K v; x ∈ carrier (Vr K v);
n ≤ (n_val K v x); 0 ≤ n⟧ ⟹ x ∈ (vp K v) ⇗(Vr K v) n⇖"
apply (frule Vr_ring[of v],
frule val_Pg[of v], erule conjE,
simp, erule conjE, drule sym,
frule Lv_pos[of v], simp,
frule val_poss_mem_Vr[of v "Pg K v"], assumption+)
apply (case_tac "n = ∞",
simp add:r_apow_def, cut_tac inf_ge_any[of "n_val K v x"],
frule ale_antisym[of "n_val K v x" "∞"], assumption+,
frule val_inf_n_val_inf[THEN sym, of v "x"],
simp add:Vr_mem_f_mem, simp,
frule value_inf_zero[of v x],
simp add:Vr_mem_f_mem, simp+, simp add:Vr_0_f_0)
apply (case_tac "n = 0",
simp add:r_apow_def,
simp add:r_apow_def,
subst n_value_idealTr[of v "na n"], assumption+,
simp add:apos_na_pos)
apply (rule val_Rxa_gt_a_1[of v "Pg K v^⇗(Vr K v) (na n)⇖" x],
assumption+,
rule Ring.npClose, assumption+,
simp add:Vr_0_f_0[THEN sym, of v],
frule Vr_integral[of v],
frule val_poss_mem_Vr[of v "Pg K v"], assumption+,
simp add:Idomain.idom_potent_nonzero)
apply (simp add:Vr_exp_f_exp,
simp add:val_exp_ring[THEN sym, of v],
rotate_tac -5, drule sym,
frule Lv_z[of v], erule exE, simp,
frule aposs_na_poss[of "n"], simp add: less_le,
simp add:asprod_amult, subst n_val[THEN sym, of v x],
assumption+,
simp add:Vr_mem_f_mem, simp,
subst amult_pos_mono_r[of _ "ant (int (na n))" "n_val K v x"],
assumption,
cut_tac an_na[of "n"], simp add:an_def, assumption+)
done
lemma (in Corps) n_value_x_2_nat:"⟦valuation K v; x ∈ carrier (Vr K v);
(an n) ≤ ((n_val K v) x)⟧ ⟹ x ∈ (vp K v)⇗♢(Vr K v) n⇖"
by (frule n_value_x_2[of v x "an n"], assumption+,
simp, simp add:r_apow_def,
case_tac "an n = ∞", simp add:an_def, simp,
case_tac "n = 0", simp,
subgoal_tac "an n ≠ 0", simp, simp add:na_an,
rule contrapos_pp, simp+, simp add:an_def)
lemma (in Corps) n_val_n_pow:"⟦valuation K v; x ∈ carrier (Vr K v); 0 ≤ n⟧ ⟹
(n ≤ (n_val K v x)) = (x ∈ (vp K v) ⇗(Vr K v) n⇖)"
by (rule iffI, simp add:n_value_x_2, simp add:n_value_x_1)
lemma (in Corps) eqval_in_vpr_apow:"⟦valuation K v; x ∈ carrier K; 0 ≤ n;
y ∈ carrier K; n_val K v x = n_val K v y; x ∈ (vp K v)⇗(Vr K v) n⇖⟧ ⟹
y ∈ (vp K v) ⇗(Vr K v) n⇖"
apply (frule n_value_x_1[of v n x], assumption+, simp,
rule n_value_x_2[of v y n], assumption+,
frule mem_vp_apow_mem_Vr[of v n x], assumption+)
apply (frule val_pos_mem_Vr[THEN sym, of v x], assumption+, simp,
simp add:val_pos_n_val_pos[of v x],
simp add:val_pos_n_val_pos[THEN sym, of v y],
simp add:val_pos_mem_Vr, assumption+)
done
lemma (in Corps) convergenceTr:"⟦valuation K v; x ∈ carrier K; b ∈ carrier K;
b ∈ (vp K v)⇗(Vr K v) n⇖; (Abs (n_val K v x)) ≤ n⟧ ⟹
x ⋅⇩r b ∈ (vp K v)⇗(Vr K v) (n + (n_val K v x))⇖"
apply (cut_tac Abs_pos[of "n_val K v x"],
frule ale_trans[of "0" "Abs (n_val K v x)" "n"], assumption+,
thin_tac "0 ≤ Abs (n_val K v x)")
apply (frule Vr_ring[of v],
frule_tac aadd_le_mono[of "Abs (n_val K v x)" "n" "n_val K v x"],
cut_tac Abs_x_plus_x_pos[of "n_val K v x"],
frule ale_trans[of "0" "Abs (n_val K v x) + n_val K v x"
"n + n_val K v x"], assumption+,
thin_tac "0 ≤ Abs (n_val K v x) + n_val K v x",
thin_tac "Abs (n_val K v x) + n_val K v x ≤ n + n_val K v x",
rule n_value_x_2[of v "x ⋅⇩r b" "n + n_val K v x"], assumption+)
apply (frule n_value_x_1[of v n b], assumption+)
apply (frule aadd_le_mono[of "n" "n_val K v b" "n_val K v x"],
frule ale_trans[of "0" "n + n_val K v x" "n_val K v b + n_val K v x"],
assumption)
apply (thin_tac "0 ≤ n + n_val K v x",
thin_tac "n ≤ n_val K v b",
thin_tac "n + n_val K v x ≤ n_val K v b + n_val K v x",
simp add:aadd_commute[of "n_val K v b" "n_val K v x"])
apply (frule n_val_valuation[of v],
simp add:val_t2p[THEN sym, of "n_val K v" x b],
cut_tac field_is_ring,
frule Ring.ring_tOp_closed[of "K" "x" "b"], assumption+,
simp add:val_pos_n_val_pos[THEN sym, of v "x ⋅⇩r b"],
simp add:val_pos_mem_Vr,
frule n_val_valuation[of v],
subst val_t2p[of "n_val K v"], assumption+,
frule n_value_x_1[of v n b], assumption+,
simp add:aadd_commute[of "n_val K v x" "n_val K v b"],
rule aadd_le_mono[of n "n_val K v b" "n_val K v x"], assumption+)
done
lemma (in Corps) convergenceTr1:"⟦valuation K v; x ∈ carrier K;
b ∈ (vp K v)⇗(Vr K v) (n + Abs (n_val K v x))⇖; 0 ≤ n⟧ ⟹
x ⋅⇩r b ∈ (vp K v) ⇗(Vr K v) n⇖"
apply (cut_tac field_is_ring,
frule Vr_ring[of v],
frule vp_apow_ideal[of v "n + Abs (n_val K v x)"],
cut_tac Abs_pos[of "n_val K v x"],
rule aadd_two_pos[of "n" "Abs (n_val K v x)"], assumption+)
apply (frule Ring.ideal_subset[of "Vr K v" "vp K v⇗ (Vr K v) (n + Abs (n_val K v x))⇖"
"b"], assumption+,
frule Vr_mem_f_mem[of v b], assumption,
frule convergenceTr[of v x b "n + Abs (n_val K v x)"], assumption+,
rule aadd_pos_le[of "n" "Abs (n_val K v x)"], assumption)
apply (frule apos_in_aug_inf[of "n"],
cut_tac Abs_pos[of "n_val K v x"],
frule apos_in_aug_inf[of "Abs (n_val K v x)"],
frule n_value_in_aug_inf[of v x], assumption+,
frule aadd_assoc_i[of "n" "Abs (n_val K v x)" "n_val K v x"],
assumption+,
cut_tac Abs_x_plus_x_pos[of "n_val K v x"])
apply (frule_tac Ring.ring_tOp_closed[of K x b], assumption+,
rule n_value_x_2[of v "x ⋅⇩r b" n], assumption+)
apply (subst val_pos_mem_Vr[THEN sym, of v "x ⋅⇩r b"], assumption+,
subst val_pos_n_val_pos[of v "x ⋅⇩r b"], assumption+)
apply (frule n_value_x_1[of "v" "n + Abs(n_val K v x) + n_val K v x" "x ⋅⇩r b"],
subst aadd_assoc_i, assumption+,
rule aadd_two_pos[of "n"], assumption+,
rule ale_trans[of "0" "n + Abs (n_val K v x) + n_val K v x"
"n_val K v (x ⋅⇩r b)"],
simp, simp add:aadd_two_pos, assumption,
frule n_value_x_1[of "v" "n + Abs (n_val K v x)" " b"],
cut_tac Abs_pos[of "n_val K v x"],
rule aadd_two_pos[of "n" "Abs (n_val K v x)"], assumption+)
apply (frule n_val_valuation[of v],
subst val_t2p[of "n_val K v"], assumption+)
apply (frule aadd_le_mono[of "n + Abs (n_val K v x)" "n_val K v b"
"n_val K v x"],
simp add:aadd_commute[of "n_val K v b" "n_val K v x"],
rule ale_trans[of "n" "n + (Abs (n_val K v x) + n_val K v x)"
"n_val K v x + n_val K v b"],
frule aadd_pos_le[of "Abs (n_val K v x) + n_val K v x" "n"],
simp add:aadd_commute[of "n"], assumption+)
done
lemma (in Corps) vp_potent_zero:"⟦valuation K v; 0 ≤ n⟧ ⟹
(n = ∞) = (vp K v ⇗(Vr K v) n⇖ = {𝟬⇘Vr K v⇙})"
apply (rule iffI)
apply (simp add:r_apow_def, rule contrapos_pp, simp+,
frule apos_neq_minf[of "n"],
cut_tac mem_ant[of "n"], simp, erule exE, simp,
simp add:ant_0[THEN sym], thin_tac "n = ant z")
apply (case_tac "z = 0", simp add:ant_0, simp add:r_apow_def,
frule Vr_ring[of v],
frule Ring.ring_one[of "Vr K v"], simp,
simp add:Vr_0_f_0, simp add:Vr_1_f_1,
frule value_of_one[of v], simp, simp add:value_of_zero,
cut_tac n = z in zneq_aneq[of _ "0"], simp only:ant_0)
apply (simp add:r_apow_def,
frule_tac n = "na (ant z)" in n_value_idealTr[of v],
simp add:na_def,
simp, thin_tac "vp K v ⇗♢(Vr K v) (na (ant z))⇖ = {𝟬⇘Vr K v⇙}",
frule Vr_ring[of v],
frule Pg_in_Vr[of v],
frule_tac n = "na (ant z)" in Ring.npClose[of "Vr K v" "Pg K v"],
assumption)
apply (frule_tac a = "(Pg K v)^⇗(Vr K v) (na (ant z))⇖" in
Ring.a_in_principal[of "Vr K v"], assumption,
simp, frule Vr_integral[of "v"],
frule val_Pg[of v], simp, (erule conjE)+,
frule_tac n = "na (ant z)" in Idomain.idom_potent_nonzero[of "Vr K v"
"Pg K v"], assumption+,
simp add:Vr_0_f_0, simp)
done
lemma (in Corps) Vr_potent_eqTr1:"⟦valuation K v; 0 ≤ n; 0 ≤ m;
(vp K v) ⇗(Vr K v) n⇖ = (vp K v) ⇗(Vr K v) m⇖; m = 0⟧ ⟹ n = m"
apply (frule Vr_ring[of v],
simp add:r_apow_def,
case_tac "n = 0", simp,
case_tac "n = ∞", simp,
frule val_Pg[of v], erule conjE, simp,
erule conjE,
rotate_tac -3, drule sym,
frule Lv_pos[of v], simp,
frule val_poss_mem_Vr[of v "Pg K v"], assumption+,
drule sym, simp, simp add:Vr_0_f_0)
apply (simp,
drule sym,
frule Ring.ring_one[of "Vr K v"], simp,
frule n_value_x_1_nat[of v "1⇩r⇘(Vr K v)⇙" "na n"], assumption,
simp add:an_na, simp add:Vr_1_f_1,
frule n_val_valuation[of v],
simp add:value_of_one[of "n_val K v"])
done
lemma (in Corps) Vr_potent_eqTr2:"⟦valuation K v;
(vp K v) ⇗♢(Vr K v) n⇖ = (vp K v) ⇗♢(Vr K v) m⇖⟧ ⟹ n = m"
apply (frule Vr_ring[of v],
frule val_Pg[of v], simp, (erule conjE)+,
rotate_tac -1, frule sym, thin_tac "v (Pg K v) = Lv K v",
frule Lv_pos[of v], simp)
apply (subgoal_tac "0 ≤ int n", subgoal_tac "0 ≤ int m",
frule n_value_idealTr[of "v" "m"]) apply simp apply simp
apply(
thin_tac "vp K v ⇗♢(Vr K v) m⇖ = Vr K v ♢⇩p (Pg K v^⇗(Vr K v) m⇖)",
frule n_value_idealTr[of "v" "n"], simp, simp,
thin_tac "vp K v ⇗♢(Vr K v) n⇖ = Vr K v ♢⇩p (Pg K v^⇗(Vr K v) m⇖)",
frule val_poss_mem_Vr[of "v" "Pg K v"], assumption+)
apply (frule Lv_z[of v], erule exE,
rotate_tac -4, drule sym, simp,
frule eq_ideal_eq_val[of "v" "Pg K v^⇗(Vr K v) n⇖" "Pg K v^⇗(Vr K v) m⇖"])
apply (rule Ring.npClose, assumption+, rule Ring.npClose, assumption+)
apply (simp only:Vr_exp_f_exp,
simp add:val_exp_ring[THEN sym, of v "Pg K v"],
thin_tac "Vr K v ♢⇩p (Pg K v^⇗K n⇖) = Vr K v ♢⇩p (Pg K v^⇗K m⇖)")
apply (case_tac "n = 0", simp, case_tac "m = 0", simp,
simp only:of_nat_0_less_iff[THEN sym, of "m"],
simp only:asprod_amult a_z_z,
simp only:ant_0[THEN sym], simp only:aeq_zeq, simp)
apply (auto simp add: asprod_mult)
done
lemma (in Corps) Vr_potent_eq:"⟦valuation K v; 0 ≤ n; 0 ≤ m;
(vp K v) ⇗(Vr K v) n⇖ = (vp K v) ⇗(Vr K v) m⇖⟧ ⟹ n = m"
apply (frule n_val_valuation[of v],
case_tac "m = 0",
simp add:Vr_potent_eqTr1)
apply (case_tac "n = 0",
frule sym, thin_tac "vp K v⇗ (Vr K v) n⇖ = vp K v⇗ (Vr K v) m⇖",
frule Vr_potent_eqTr1[of v m n], assumption+,
rule sym, assumption,
frule vp_potent_zero[of "v" "n"], assumption+)
apply (case_tac "n = ∞", simp,
thin_tac "vp K v⇗ (Vr K v) ∞⇖ = {𝟬⇘Vr K v⇙}",
frule vp_potent_zero[THEN sym, of v m], assumption+, simp,
simp,
frule vp_potent_zero[THEN sym, of v "m"], assumption+, simp,
thin_tac "vp K v⇗ (Vr K v) m⇖ ≠ {𝟬⇘Vr K v⇙}")
apply (frule aposs_na_poss[of "n"], subst less_le, simp,
frule aposs_na_poss[of "m"], subst less_le, simp,
simp add:r_apow_def,
frule Vr_potent_eqTr2[of "v" "na n" "na m"], assumption+,
thin_tac "vp K v ⇗♢(Vr K v) (na n)⇖ = vp K v ⇗♢(Vr K v) (na m)⇖",
simp add:aeq_nat_eq[THEN sym])
done
text‹the following two lemma (in Corps) s are used in completion of K›
lemma (in Corps) Vr_prime_maximalTr1:"⟦valuation K v; x ∈ carrier (Vr K v);
Suc 0 < n⟧ ⟹ x ⋅⇩r⇘(Vr K v)⇙ (x^⇗K (n - Suc 0)⇖) ∈ (Vr K v) ♢⇩p (x^⇗K n⇖)"
apply (frule Vr_ring[of v],
subgoal_tac "x^⇗K n⇖ = x^⇗K (Suc (n - Suc 0))⇖",
simp del:Suc_pred,
rotate_tac -1, drule sym)
apply (subst Vr_tOp_f_tOp, assumption+,
subst Vr_exp_f_exp[of v, THEN sym], assumption+,
simp only:Ring.npClose, simp del:Suc_pred)
apply (cut_tac field_is_ring,
frule Ring.npClose[of K x "n - Suc 0"],
frule Vr_mem_f_mem[of v x], assumption+,
frule Vr_mem_f_mem[of v x], assumption+)
apply (simp add:Ring.ring_tOp_commute[of K x "x^⇗K (n - Suc 0)⇖"])
apply (rule Ring.a_in_principal, assumption)
apply (frule Ring.npClose[of "Vr K v" x n], assumption,
simp add:Vr_exp_f_exp)
apply (simp only:Suc_pred)
done
lemma (in Corps) Vr_prime_maximalTr2:"⟦ valuation K v; x ∈ vp K v; x ≠ 𝟬;
Suc 0 < n⟧ ⟹ x ∉ Vr K v ♢⇩p (x^⇗K n⇖) ∧ x^⇗K (n - Suc 0)⇖ ∉ (Vr K v) ♢⇩p (x^⇗K n⇖)"
apply (frule Vr_ring[of v])
apply (frule vp_mem_Vr_mem[of v x], assumption,
frule Ring.npClose[of "Vr K v" x n],
simp only:Vr_exp_f_exp)
apply (cut_tac field_is_ring,
cut_tac field_is_idom,
frule Vr_mem_f_mem[of v x], assumption+,
frule Idomain.idom_potent_nonzero[of K x n], assumption+)
apply (rule conjI)
apply (rule contrapos_pp, simp+)
apply (frule val_Rxa_gt_a[of v "x^⇗K n⇖" x],
simp, simp add:Vr_exp_f_exp, assumption+)
apply (simp add:val_exp_ring[THEN sym, of v x n])
apply (frule val_nonzero_z[of v x], assumption+, erule exE,
simp add:asprod_amult a_z_z)
apply (simp add:vp_mem_val_poss[of v x])
apply (rule contrapos_pp, simp+)
apply (frule val_Rxa_gt_a[of v "x^⇗K n⇖" "x^⇗K (n - Suc 0)⇖"])
apply (simp, frule Ring.npClose[of "Vr K v" "x" "n - Suc 0"], assumption+)
apply (simp add:Vr_exp_f_exp)
apply (frule Ring.npClose[of "Vr K v" "x" "n - Suc 0"], assumption+,
simp add:Vr_exp_f_exp, assumption)
apply (simp add:val_exp_ring[THEN sym, of v x])
apply (simp add:vp_mem_val_poss[of "v" "x"])
apply (frule val_nonzero_z[of "v" "x"], assumption+, erule exE,
simp add:asprod_amult a_z_z)
done
lemma (in Corps) Vring_prime_maximal:"⟦valuation K v; prime_ideal (Vr K v) I;
I ≠ {𝟬⇘Vr K v⇙}⟧ ⟹ maximal_ideal (Vr K v) I"
apply (frule Vr_ring[of v],
frule Ring.prime_ideal_proper[of "Vr K v" "I"], assumption+,
frule Ring.prime_ideal_ideal[of "Vr K v" "I"], assumption+,
frule ideal_pow_vp[of v I],
frule n_value_idealTr[of "v" "na (n_val K v (Ig K v I))"],
simp, simp, assumption+)
apply (case_tac "na (n_val K v (Ig K v I)) = 0",
simp, frule Ring.Rxa_one[of "Vr K v"], simp,
frule Suc_leI[of "0" "na (n_val K v (Ig K v I))"],
thin_tac "0 < na (n_val K v (Ig K v I))")
apply (case_tac "na (n_val K v (Ig K v I)) = Suc 0", simp,
frule Pg_in_Vr[of v])
apply (frule vp_maximal[of v],
frule Ring.maximal_ideal_ideal[of "Vr K v" "vp K v"], assumption+,
subst Ring.idealprod_whole_r[of "Vr K v" "vp K v"], assumption+)
apply (rotate_tac -1, drule not_sym,
frule le_neq_implies_less[of "Suc 0" "na (n_val K v (Ig K v I))"],
assumption+,
thin_tac "Suc 0 ≤ na (n_val K v (Ig K v I))",
thin_tac "Suc 0 ≠ na (n_val K v (Ig K v I))",
thin_tac "Vr K v ♢⇩p 1⇩r⇘Vr K v⇙ = carrier (Vr K v)")
apply (frule val_Pg[of v], simp, (erule conjE)+,
frule Lv_pos[of v], rotate_tac -2, drule sym)
apply (frule val_poss_mem_Vr[of "v" "Pg K v"],
frule vp_mem_val_poss[THEN sym, of "v" "Pg K v"], assumption+, simp)
apply (frule Vr_prime_maximalTr2[of v "Pg K v"
"na (n_val K v (Ig K v I))"],
simp add:vp_mem_val_poss[of v "Pg K v"], assumption+, erule conjE)
apply (frule Ring.npMulDistr[of "Vr K v" "Pg K v" "na 1" "na (n_val K v (Ig K v I)) - Suc 0"], assumption+, simp add:na_1)
apply (rotate_tac 8, drule sym)
apply (frule Ring.a_in_principal[of "Vr K v"
"Pg K v^⇗(Vr K v) (na (n_val K v (Ig K v I)))⇖"], simp add:Ring.npClose)
apply (simp add:Vr_exp_f_exp[of "v"])
apply (simp add:Ring.ring_l_one[of "Vr K v"])
apply (frule n_value_idealTr[THEN sym,
of v "na (n_val K v (Ig K v I))"], simp)
apply (simp add:Vr_exp_f_exp)
apply (rotate_tac 6, drule sym, simp)
apply (thin_tac "I ≠ carrier (Vr K v)",
thin_tac "I = vp K v ⇗♢(Vr K v) (na (n_val K v (Ig K v I)))⇖",
thin_tac "v (Pg K v) = Lv K v",
thin_tac "(Vr K v) ♢⇩p ((Pg K v) ⋅⇩r⇘(Vr K v)⇙
((Pg K v)^⇗K (na ((n_val K v) (Ig K v I)) - (Suc 0))⇖)) =
I",
thin_tac "Pg K v ∈ carrier K",
thin_tac "Pg K v ≠ 𝟬",
thin_tac "Pg K v^⇗K (na ((n_val K v) (Ig K v I)))⇖ =
Pg K v ⋅⇩r⇘Vr K v⇙ Pg K v^⇗K ((na ((n_val K v) (Ig K v I))) - Suc 0)⇖")
apply (simp add:prime_ideal_def, erule conjE,
drule_tac x = "Pg K v" in bspec, assumption,
drule_tac x = "Pg K v^⇗K (na (n_val K v (Ig K v I)) - Suc 0)⇖ " in bspec)
apply (simp add:Vr_exp_f_exp[THEN sym, of v])
apply (rule Ring.npClose[of "Vr K v" "Pg K v"], assumption+)
apply simp
done
text‹From the above lemma (in Corps) , we see that a valuation ring is of dimension one.›
lemma (in Corps) field_frac1:"⟦1⇩r ≠ 𝟬; x ∈ carrier K⟧ ⟹ x = x ⋅⇩r ((1⇩r)⇗‐K⇖)"
by (simp add:invf_one,
cut_tac field_is_ring,
simp add:Ring.ring_r_one[THEN sym])
lemma (in Corps) field_frac2:"⟦x ∈ carrier K; x ≠ 𝟬⟧ ⟹ x = (1⇩r) ⋅⇩r ((x⇗‐K⇖)⇗‐K⇖)"
by (cut_tac field_is_ring, simp add:field_inv_inv,
simp add:Ring.ring_l_one[THEN sym])
lemma (in Corps) val_nonpos_inv_pos:"⟦valuation K v; x ∈ carrier K;
¬ 0 ≤ (v x)⟧ ⟹ 0 < (v (x⇗‐K⇖))"
by (case_tac "x = 𝟬⇘K⇙", simp add:value_of_zero,
frule Vr_ring[of v],
simp add:aneg_le[of "0" "v x"],
frule value_of_inv[THEN sym, of v x], assumption+,
frule aless_minus[of "v x" "0"], simp)
lemma (in Corps) frac_Vr_is_K:"⟦valuation K v; x ∈ carrier K⟧ ⟹
∃s∈carrier (Vr K v). ∃t∈carrier (Vr K v) - {𝟬}. x = s ⋅⇩r (t⇗‐K⇖)"
apply (frule Vr_ring[of v],
frule has_val_one_neq_zero[of v])
apply (case_tac "x = 𝟬⇘K⇙",
frule Ring.ring_one[of "Vr K v"],
frule field_frac1[of x],
simp only:Vr_1_f_1, frule Ring.ring_zero[of "Vr K v"],
simp add:Vr_0_f_0 Vr_1_f_1, blast)
apply (case_tac "0 ≤ (v x)",
frule val_pos_mem_Vr[THEN sym, of v x], assumption+, simp,
frule field_frac1[of x], assumption+,
frule has_val_one_neq_zero[of v],
frule Ring.ring_one[of "Vr K v"], simp only:Vr_1_f_1, blast)
apply (frule val_nonpos_inv_pos[of v x], assumption+,
cut_tac invf_inv[of x], erule conjE,
frule val_poss_mem_Vr[of v "x⇗‐K⇖"], assumption+)
apply (frule Ring.ring_one[of "Vr K v"], simp only:Vr_1_f_1,
frule field_frac2[of x], assumption+)
apply (cut_tac invf_closed1[of x], blast, simp+)
done
lemma (in Corps) valuations_eqTr1:"⟦valuation K v; valuation K v';
Vr K v = Vr K v'; ∀x∈carrier (Vr K v). v x = v' x⟧ ⟹ v = v'"
apply (rule funcset_eq [of _ "carrier K"],
simp add:valuation_def, simp add:valuation_def,
rule ballI,
frule_tac x = x in frac_Vr_is_K[of v], assumption+,
(erule bexE)+, simp, erule conjE)
apply (frule_tac x = t in Vr_mem_f_mem[of v'], assumption,
cut_tac x = t in invf_closed1, simp, simp, erule conjE)
apply (frule_tac x = s in Vr_mem_f_mem[of "v'"], assumption+,
simp add:val_t2p, simp add:value_of_inv)
done
lemma (in Corps) ridmap_rhom:"⟦ valuation K v; valuation K v';
carrier (Vr K v) ⊆ carrier (Vr K v')⟧ ⟹
ridmap (Vr K v) ∈ rHom (Vr K v) (Vr K v')"
apply (frule Vr_ring[of "v"], frule Vr_ring[of "v'"],
subst rHom_def, simp, rule conjI)
apply (simp add:aHom_def, rule conjI,
rule Pi_I, simp add:ridmap_def subsetD,
simp add:ridmap_def restrict_def extensional_def,
(rule ballI)+,
frule Ring.ring_is_ag[of "Vr K v"], simp add:aGroup.ag_pOp_closed,
simp add:Vr_pOp_f_pOp subsetD)
apply (rule conjI, (rule ballI)+, simp add:ridmap_def,
simp add:Ring.ring_tOp_closed, simp add:Vr_tOp_f_tOp subsetD,
frule Ring.ring_one[of "Vr K v"], frule Ring.ring_one[of "Vr K v'"],
simp add:Vr_1_f_1, simp add:ridmap_def )
done
lemma (in Corps) contract_ideal:"⟦valuation K v; valuation K v';
carrier (Vr K v) ⊆ carrier (Vr K v')⟧ ⟹
ideal (Vr K v) (carrier (Vr K v) ∩ vp K v')"
apply (frule_tac ridmap_rhom[of "v" "v'"], assumption+,
frule Vr_ring[of "v"], frule Vr_ring[of "v'"])
apply (cut_tac TwoRings.i_contract_ideal[of "Vr K v" "Vr K v'"
"ridmap (Vr K v)" "vp K v'"],
subgoal_tac "(i_contract (ridmap (Vr K v)) (Vr K v) (Vr K v')
(vp K v')) = (carrier (Vr K v) ∩ vp K v')")
apply simp
apply(thin_tac "ideal (Vr K v) (i_contract (ridmap (Vr K v))
(Vr K v) (Vr K v') (vp K v'))",
simp add:i_contract_def invim_def ridmap_def, blast)
apply (simp add:TwoRings_def TwoRings_axioms_def, simp)
apply (simp add:vp_ideal)
done
lemma (in Corps) contract_prime:"⟦valuation K v; valuation K v';
carrier (Vr K v) ⊆ carrier (Vr K v')⟧ ⟹
prime_ideal (Vr K v) (carrier (Vr K v) ∩ vp K v')"
apply (frule_tac ridmap_rhom[of "v" "v'"], assumption+,
frule Vr_ring[of "v"],
frule Vr_ring[of "v'"],
cut_tac TwoRings.i_contract_prime[of "Vr K v" "Vr K v'" "ridmap (Vr K v)"
"vp K v'"])
apply (subgoal_tac "(i_contract (ridmap (Vr K v)) (Vr K v) (Vr K v')
(vp K v')) = (carrier (Vr K v) ∩ vp K v')",
simp,
thin_tac "prime_ideal (Vr K v) (i_contract
(ridmap (Vr K v)) (Vr K v) (Vr K v') (vp K v'))",
simp add:i_contract_def invim_def ridmap_def, blast)
apply (simp add:TwoRings_def TwoRings_axioms_def, simp)
apply (simp add:vp_prime)
done
lemma (in Corps) valuation_equivTr:"⟦valuation K v; valuation K v';
x ∈ carrier K; 0 < (v' x); carrier (Vr K v) ⊆ carrier (Vr K v')⟧
⟹ 0 ≤ (v x)"
apply (rule contrapos_pp, simp+,
frule val_nonpos_inv_pos[of "v" "x"], assumption+,
case_tac "x = 𝟬⇘K⇙", simp add:value_of_zero[of "v"]) apply (
cut_tac invf_closed1[of "x"], simp, erule conjE,
frule aless_imp_le[of "0" "v (x⇗‐K⇖)"])
apply (simp add:val_pos_mem_Vr[of v "x⇗‐K⇖"],
frule subsetD[of "carrier (Vr K v)" "carrier (Vr K v')" "x⇗‐K⇖"],
assumption+,
frule val_pos_mem_Vr[THEN sym, of "v'" "x⇗‐K⇖"], assumption+)
apply (simp, simp add:value_of_inv[of "v'" "x"],
cut_tac ale_minus[of "0" "- v' x"], thin_tac "0 ≤ - v' x",
simp only:a_minus_minus,
cut_tac aneg_less[THEN sym, of "v' x" "- 0"], simp,
assumption, simp)
done
lemma (in Corps) contract_maximal:"⟦valuation K v; valuation K v';
carrier (Vr K v) ⊆ carrier (Vr K v')⟧ ⟹
maximal_ideal (Vr K v) (carrier (Vr K v) ∩ vp K v')"
apply (frule Vr_ring[of "v"],
frule Vr_ring[of "v'"],
rule Vring_prime_maximal, assumption+,
simp add:contract_prime)
apply (frule vp_nonzero[of "v'"],
frule vp_ideal[of "v'"],
frule Ring.ideal_zero[of "Vr K v'" "vp K v'"], assumption+,
frule sets_not_eq[of "vp K v'" "{𝟬⇘(Vr K v')⇙}"],
simp add: singleton_sub[of "𝟬⇘(Vr K v')⇙" "carrier (Vr K v')"],
erule bexE, simp add:Vr_0_f_0)
apply (case_tac "a ∈ carrier (Vr K v)", blast,
frule_tac x = a in vp_mem_Vr_mem[of "v'"], assumption+,
frule_tac x = a in Vr_mem_f_mem[of "v'"], assumption+,
subgoal_tac "a ∈ carrier (Vr K v)", blast,
frule_tac x1 = a in val_pos_mem_Vr[THEN sym, of "v"], assumption+,
simp, frule val_nonpos_inv_pos[of "v"], assumption+)
apply (frule_tac y = "v (a⇗‐K⇖)" in aless_imp_le[of "0"],
cut_tac x = a in invf_closed1, simp,
frule_tac x = "a⇗‐K⇖" in val_poss_mem_Vr[of v], simp, assumption+)
apply (frule_tac c = "a⇗‐K⇖" in subsetD[of "carrier (Vr K v)"
"carrier (Vr K v')"], assumption+) apply (
frule_tac x = "a⇗‐K⇖" in val_pos_mem_Vr[of "v'"],
simp, simp only:value_of_inv[of "v'"], simp,
simp add:value_of_inv[of "v'"])
apply (frule_tac y = "- v' a" in ale_minus[of "0"], simp add:a_minus_minus,
frule_tac x = a in vp_mem_val_poss[of "v'"], assumption+,
simp)
done
section "Equivalent valuations"
definition
v_equiv :: "[_ , 'r ⇒ ant, 'r ⇒ ant] ⇒ bool" where
"v_equiv K v1 v2 ⟷ n_val K v1 = n_val K v2"
lemma (in Corps) valuation_equivTr1:"⟦valuation K v; valuation K v';
∀x∈carrier K. 0 ≤ (v x) ⟶ 0 ≤ (v' x)⟧ ⟹
carrier (Vr K v) ⊆ carrier (Vr K v')"
apply (frule Vr_ring[of "v"],
frule Vr_ring[of "v'"])
apply (rule subsetI,
case_tac "x = 𝟬⇘K⇙", simp, simp add:Vr_def Sr_def,
frule_tac x1 = x in val_pos_mem_Vr[THEN sym, of "v"],
frule_tac x = x in Vr_mem_f_mem[of "v"],
simp, frule_tac x = x in Vr_mem_f_mem[of "v"], assumption+)
apply (drule_tac x = x in bspec, simp add:Vr_mem_f_mem)
apply simp
apply (subst val_pos_mem_Vr[THEN sym, of v'], assumption+,
simp add:Vr_mem_f_mem, assumption+)
done
lemma (in Corps) valuation_equivTr2:"⟦valuation K v; valuation K v';
carrier (Vr K v) ⊆ carrier (Vr K v'); vp K v = carrier (Vr K v) ∩ vp K v'⟧
⟹ carrier (Vr K v') ⊆ carrier (Vr K v)"
apply (frule Vr_ring[of "v"], frule Vr_ring[of "v'"])
apply (rule subsetI)
apply (case_tac "x = 𝟬⇘(Vr K v')⇙", simp,
subst Vr_0_f_0[of "v'"], assumption+,
subst Vr_0_f_0[of "v", THEN sym], assumption,
simp add:Ring.ring_zero)
apply (rule contrapos_pp, simp+)
apply (frule_tac x = x in Vr_mem_f_mem[of "v'"], assumption+)
apply (simp add:val_pos_mem_Vr[THEN sym, of "v"])
apply (cut_tac y = "v x" in aneg_le[of "0"], simp)
apply (simp add:Vr_0_f_0[of "v'"])
apply (frule_tac x = "v x" in aless_minus[of _ "0"], simp,
thin_tac "v x < 0", thin_tac "¬ 0 ≤ v x")
apply (simp add:value_of_inv[THEN sym, of "v"])
apply (cut_tac x = x in invf_closed1, simp, simp, erule conjE)
apply (frule_tac x1 = "x⇗‐K⇖" in vp_mem_val_poss[THEN sym, of "v"],
assumption, simp, erule conjE)
apply (frule vp_ideal [of "v'"])
apply (frule_tac x = "x⇗‐K⇖" and r = x in Ring.ideal_ring_multiple[of "Vr K v'"
"vp K v'"], assumption+)
apply (frule_tac x = "x⇗‐K⇖" in vp_mem_Vr_mem[of "v'"], assumption+)
apply (frule_tac x = x and y = "x⇗‐K⇖" in Ring.ring_tOp_commute[of "Vr K v'"],
assumption+, simp,
thin_tac "x ⋅⇩r⇘Vr K v'⇙ x⇗‐ K⇖ = x⇗‐ K⇖ ⋅⇩r⇘Vr K v'⇙ x")
apply (simp add:Vr_tOp_f_tOp)
apply (cut_tac x = x in linvf, simp, simp)
apply (cut_tac field_is_ring, frule Ring.ring_one[of "K"])
apply (frule ideal_inc_elem0val_whole[of "v'" "1⇩r" "vp K v'"],
assumption+, simp add:value_of_one, assumption+)
apply (frule vp_not_whole[of "v'"], simp)
done
lemma (in Corps) eq_carr_eq_Vring:" ⟦valuation K v; valuation K v';
carrier (Vr K v) = carrier (Vr K v')⟧ ⟹ Vr K v = Vr K v'"
apply (simp add:Vr_def Sr_def)
done
lemma (in Corps) valuations_equiv:"⟦valuation K v; valuation K v';
∀x∈carrier K. 0 ≤ (v x) ⟶ 0 ≤ (v' x)⟧ ⟹ v_equiv K v v'"
apply (frule Vr_ring[of "v"], frule Vr_ring[of "v'"])
apply (frule valuation_equivTr1[of "v" "v'"], assumption+)
apply (frule contract_maximal [of "v" "v'"], assumption+)
apply (frule Vr_local[of "v" "(carrier (Vr K v) ∩ vp K v')"],
assumption+)
apply (frule valuation_equivTr2[of "v" "v'"], assumption+,
frule equalityI[of "carrier (Vr K v)" "carrier (Vr K v')"],
assumption+,
thin_tac "carrier (Vr K v) ⊆ carrier (Vr K v')",
thin_tac "carrier (Vr K v') ⊆ carrier (Vr K v)")
apply (frule vp_ideal[of "v'"],
frule Ring.ideal_subset1[of "Vr K v'" "vp K v'"], assumption,
simp add:Int_absorb1,
thin_tac "∀x∈carrier K. 0 ≤ v x ⟶ 0 ≤ v' x",
thin_tac "vp K v' ⊆ carrier (Vr K v')",
thin_tac "ideal (Vr K v') (vp K v')",
thin_tac "maximal_ideal (Vr K v) (vp K v')")
apply (simp add:v_equiv_def,
rule valuations_eqTr1[of "n_val K v" "n_val K v'"],
(simp add:n_val_valuation)+,
rule eq_carr_eq_Vring[of "n_val K v" "n_val K v'"],
(simp add:n_val_valuation)+,
subst Vr_n_val_Vr[THEN sym, of "v"], assumption+,
subst Vr_n_val_Vr[THEN sym, of "v'"], assumption+)
apply (rule ballI,
frule n_val_valuation[of "v"],
frule n_val_valuation[of "v'"],
frule_tac x1 = x in val_pos_mem_Vr[THEN sym, of "n_val K v"],
simp add:Vr_mem_f_mem, simp,
frule Vr_n_val_Vr[THEN sym, of "v"], simp,
thin_tac "carrier (Vr K (n_val K v)) = carrier (Vr K v')",
frule_tac x1 = x in val_pos_mem_Vr[THEN sym, of "v'"],
simp add:Vr_mem_f_mem,
simp,
frule_tac x = x in val_pos_n_val_pos[of "v'"],
simp add:Vr_mem_f_mem, simp,
frule_tac x = x in ideal_apow_n_val[of "v"],
simp add:Vr_n_val_Vr[THEN sym, of "v"], simp)
apply (frule eq_carr_eq_Vring[of "v" "v'"], assumption+,
frule_tac x = x in ideal_apow_n_val[of "v'"], assumption,
simp add:Vr_n_val_Vr[THEN sym, of "v"],
thin_tac "Vr K v' ♢⇩p x = vp K v'⇗ (Vr K v') (n_val K v x)⇖",
frule_tac n = "n_val K v' x" and m = "n_val K v x" in
Vr_potent_eq[of "v'"], assumption+,
frule sym, assumption+)
done
lemma (in Corps) val_equiv_axiom1:"valuation K v ⟹ v_equiv K v v"
apply (simp add:v_equiv_def)
done
lemma (in Corps) val_equiv_axiom2:"⟦ valuation K v; valuation K v';
v_equiv K v v'⟧ ⟹ v_equiv K v' v"
apply (simp add:v_equiv_def)
done
lemma (in Corps) val_equiv_axiom3:"⟦ valuation K v; valuation K v';
valuation K v'; v_equiv K v v'; v_equiv K v' v''⟧ ⟹ v_equiv K v v''"
apply (simp add:v_equiv_def)
done
lemma (in Corps) n_val_equiv_val:"⟦ valuation K v⟧ ⟹
v_equiv K v (n_val K v)"
apply (frule valuations_equiv[of "v" "n_val K v"], simp add:n_val_valuation)
apply (rule ballI, rule impI, simp add:val_pos_n_val_pos,
assumption)
done
section "Prime divisors"
definition
prime_divisor :: "[_, 'b ⇒ ant] ⇒
('b ⇒ ant) set" ("(2P⇘ _ _⇙)" [96,97]96) where
"P⇘K v⇙ = {v'. valuation K v' ∧ v_equiv K v v'}"
definition
prime_divisors :: "_ ⇒ ('b ⇒ ant) set set" ("Pdsı" 96) where
"Pds⇘K⇙ = {P. ∃v. valuation K v ∧ P = P⇘ K v⇙ }"
definition
normal_valuation_belonging_to_prime_divisor ::
"[_ , ('b ⇒ ant) set] ⇒ ('b ⇒ ant)" ("(ν⇘_ _⇙)" [96,97]96) where
"ν⇘K P⇙ = n_val K (SOME v. v ∈ P)"
lemma (in Corps) val_in_P_valuation:"⟦valuation K v; v' ∈ P⇘K v⇙⟧ ⟹
valuation K v'"
apply (simp add:prime_divisor_def)
done
lemma (in Corps) vals_in_P_equiv:"⟦ valuation K v; v' ∈ P⇘K v⇙⟧ ⟹
v_equiv K v v'"
apply (simp add:prime_divisor_def)
done
lemma (in Corps) v_in_prime_v:"valuation K v ⟹ v ∈ P⇘K v⇙"
apply (simp add:prime_divisor_def,
frule val_equiv_axiom1[of "v"], assumption+)
done
lemma (in Corps) some_in_prime_divisor:"valuation K v ⟹
(SOME w. w ∈ P⇘K v⇙) ∈ P⇘K v⇙"
apply (subgoal_tac "P⇘ K v⇙ ≠ {}",
rule nonempty_some[of "P⇘ K v⇙"], assumption+,
frule v_in_prime_v[of "v"])
apply blast
done
lemma (in Corps) valuation_some_in_prime_divisor:"valuation K v
⟹ valuation K (SOME w. w ∈ P⇘K v⇙)"
apply (frule some_in_prime_divisor[of "v"],
simp add:prime_divisor_def)
done
lemma (in Corps) valuation_some_in_prime_divisor1:"P ∈ Pds ⟹
valuation K (SOME w. w ∈ P)"
apply (simp add:prime_divisors_def, erule exE)
apply (simp add:valuation_some_in_prime_divisor)
done
lemma (in Corps) representative_of_pd_valuation:
"P ∈ Pds ⟹ valuation K (ν⇘K P⇙)"
apply (simp add:prime_divisors_def,
erule exE, erule conjE,
simp add:normal_valuation_belonging_to_prime_divisor_def,
frule_tac v = v in valuation_some_in_prime_divisor)
apply (rule n_val_valuation, assumption+)
done
lemma (in Corps) some_in_P_equiv:"valuation K v ⟹
v_equiv K v (SOME w. w ∈ P⇘K v⇙)"
apply (frule some_in_prime_divisor[of v])
apply (rule vals_in_P_equiv, assumption+)
done
lemma (in Corps) n_val_n_val1:"P ∈ Pds ⟹ n_val K (ν⇘K P⇙) = (ν⇘K P⇙)"
apply (simp add: normal_valuation_belonging_to_prime_divisor_def,
frule valuation_some_in_prime_divisor1[of P])
apply (rule n_val_n_val[of "SOME v. v ∈ P"], assumption+)
done
lemma (in Corps) P_eq_val_equiv:"⟦valuation K v; valuation K v'⟧ ⟹
(v_equiv K v v') = (P⇘K v⇙ = P⇘K v'⇙)"
apply (rule iffI,
rule equalityI,
rule subsetI, simp add:prime_divisor_def, erule conjE,
frule val_equiv_axiom2[of "v" "v'"], assumption+,
rule val_equiv_axiom3[of "v'" "v"], assumption+,
rule subsetI, simp add:prime_divisor_def, erule conjE)
apply (rule val_equiv_axiom3[of "v" "v'"], assumption+,
frule v_in_prime_v[of "v"], simp,
thin_tac "P⇘K v⇙ = P⇘K v'⇙",
simp add:prime_divisor_def,
rule val_equiv_axiom2[of "v'" "v"], assumption+)
done
lemma (in Corps) unique_n_valuation:"⟦ P ∈ Pds⇘K⇙; P' ∈ Pds⟧ ⟹
(P = P') = (ν⇘K P⇙ = ν⇘K P'⇙)"
apply (rule iffI, simp)
apply (simp add:prime_divisors_def,
(erule exE)+, (erule conjE)+)
apply (simp add:normal_valuation_belonging_to_prime_divisor_def,
frule_tac v = v in some_in_P_equiv,
frule_tac v = va in some_in_P_equiv,
subgoal_tac "v_equiv K (SOME w. w ∈ P⇘K v⇙) (SOME w. w ∈ P⇘K va⇙)")
apply (frule_tac v = v in some_in_prime_divisor,
frule_tac v = va in some_in_prime_divisor,
frule_tac v = v and v' = "SOME w. w ∈ P⇘K v⇙" and v'' =
"SOME w. w ∈ P⇘K va⇙" in val_equiv_axiom3)
apply (simp add:prime_divisor_def,
simp add:prime_divisor_def, assumption+,
frule_tac v = va and v' = "SOME w. w ∈ P⇘K va⇙" in
val_equiv_axiom2,
simp add:prime_divisor_def, assumption+)
apply (frule_tac v = v and v' = "SOME w. w ∈ P⇘K va⇙" and v'' = va in
val_equiv_axiom3,
simp add:prime_divisor_def,
simp add:prime_divisor_def, assumption+,
frule_tac v = v and v' = va in P_eq_val_equiv, assumption+)
apply simp
apply (simp add:v_equiv_def)
done
lemma (in Corps) n_val_representative:"P ∈ Pds ⟹ (ν⇘K P⇙) ∈ P"
apply (simp add:prime_divisors_def,
erule exE, erule conjE,
simp add:normal_valuation_belonging_to_prime_divisor_def,
frule_tac v = v in valuation_some_in_prime_divisor,
frule_tac v = "SOME w. w ∈ P⇘K v⇙" in
n_val_equiv_val,
frule_tac v = v in some_in_P_equiv,
frule_tac v = v and v' = "SOME w. w ∈ P⇘ K v⇙" and v'' =
"n_val K (SOME w. w ∈ P⇘K v⇙)" in val_equiv_axiom3,
assumption+,
frule_tac v = v in n_val_valuation,
simp add:prime_divisor_def, simp add:n_val_valuation)
done
lemma (in Corps) val_equiv_eq_pdiv:"⟦ P ∈ Pds⇘K⇙; P'∈ Pds⇘K⇙; valuation K v;
valuation K v'; v_equiv K v v'; v ∈ P; v' ∈ P' ⟧ ⟹ P = P'"
apply (simp add:prime_divisors_def,
(erule exE)+, (erule conjE)+)
apply (rename_tac w w',
frule_tac v = w in vals_in_P_equiv[of _ "v"], simp,
frule_tac v = w' in vals_in_P_equiv[of _ "v'"], simp,
frule_tac v = w and v' = v and v'' = v' in val_equiv_axiom3,
assumption+,
frule_tac v = w' in val_equiv_axiom2[of _ "v'"], assumption+,
frule_tac v = w and v' = v' and v'' = w' in val_equiv_axiom3,
assumption+) apply simp+
apply (simp add:P_eq_val_equiv)
done
lemma (in Corps) distinct_p_divisors:"⟦ P ∈ Pds⇘K⇙; P' ∈ Pds⇘K⇙⟧ ⟹
(¬ P = P') = (¬ v_equiv K (ν⇘K P⇙) (ν⇘K P'⇙))"
apply (rule iffI,
rule contrapos_pp, simp+,
frule val_equiv_eq_pdiv[of "P" "P'" "ν⇘K P⇙" "ν⇘K P'⇙"], assumption+,
simp add: representative_of_pd_valuation,
simp add: representative_of_pd_valuation, assumption)
apply (rule n_val_representative[of "P"], assumption,
rule n_val_representative[of "P'"], assumption,
simp,
rule contrapos_pp, simp+, frule sym, thin_tac "P = P'",
simp,
frule representative_of_pd_valuation[of P],
frule val_equiv_axiom1[of "ν⇘K P⇙"], simp)
done
section "Approximation"
definition
valuations :: "[_ , nat, nat ⇒ ('r ⇒ ant)] ⇒ bool" where
"valuations K n vv ⟷ (∀j ≤ n. valuation K (vv j))"
definition
vals_nonequiv :: "[_, nat, nat ⇒ ('r ⇒ ant)] ⇒ bool" where
"vals_nonequiv K n vv ⟷ valuations K n vv ∧
(∀j≤n. ∀l ≤ n. j ≠ l ⟶ ¬ (v_equiv K (vv j) (vv l)))"
definition
Ostrowski_elem :: "[_, nat, nat ⇒ ('b ⇒ ant), 'b] ⇒ bool" where
"Ostrowski_elem K n vv x ⟷
(0 < (vv 0 (1⇩r⇘K⇙ ±⇘K⇙ (-⇩a⇘K⇙ x)))) ∧ (∀j∈nset (Suc 0) n. 0 < (vv j x))"
lemma (in Corps) Ostrowski_elem_0:"⟦vals_nonequiv K n vv; x ∈ carrier K;
Ostrowski_elem K n vv x⟧ ⟹ 0 < (vv 0 (1⇩r ± (-⇩a x)))"
apply (simp add:Ostrowski_elem_def)
done
lemma (in Corps) Ostrowski_elem_Suc:"⟦vals_nonequiv K n vv; x ∈ carrier K;
Ostrowski_elem K n vv x; j ∈ nset (Suc 0) n⟧ ⟹ 0 < (vv j x)"
apply (simp add:Ostrowski_elem_def)
done
lemma (in Corps) vals_nonequiv_valuation:"⟦vals_nonequiv K n vv; m ≤ n⟧ ⟹
valuation K (vv m)"
apply (simp add:vals_nonequiv_def, erule conjE)
apply (thin_tac "∀j≤n. ∀l≤ n. j ≠ l ⟶ ¬ v_equiv K (vv j) (vv l)")
apply (simp add:valuations_def)
done
lemma (in Corps) vals_nonequiv:"⟦ vals_nonequiv K (Suc (Suc n)) vv;
i ≤ (Suc (Suc n)); j ≤ (Suc (Suc n)); i ≠ j⟧ ⟹
¬ (v_equiv K (vv i) (vv j))"
apply (simp add:vals_nonequiv_def)
done
lemma (in Corps) skip_vals_nonequiv:"vals_nonequiv K (Suc (Suc n)) vv ⟹
vals_nonequiv K (Suc n) (compose {l. l ≤ (Suc n)} vv (skip j))"
apply (subst vals_nonequiv_def)
apply (rule conjI)
apply (subst valuations_def, rule allI, rule impI,
simp add:compose_def)
apply (cut_tac l = ja and n = "Suc n" in skip_mem[of _ _ "j"], simp,
frule_tac m = "skip j ja" in vals_nonequiv_valuation[of
"Suc (Suc n)" "vv"], simp, assumption)
apply ((rule allI, rule impI)+, rule impI,
cut_tac l = ja and n = "Suc n" in skip_mem[of _ _ "j"], simp,
cut_tac l = l and n = "Suc n" in skip_mem[of _ _ "j"], simp+)
apply (cut_tac i = ja and j = l in skip_inj[of _ "Suc n" _ "j"], simp+,
simp add:compose_def,
rule_tac i = "skip j ja" and j = "skip j l" in
vals_nonequiv[of "n"], assumption+)
done
lemma (in Corps) not_v_equiv_reflex:"⟦valuation K v; valuation K v';
¬ v_equiv K v v'⟧ ⟹ ¬ v_equiv K v' v "
apply (simp add:v_equiv_def)
done
lemma (in Corps) nonequiv_ex_Ostrowski_elem:"⟦valuation K v; valuation K v';
¬ v_equiv K v v'⟧ ⟹ ∃x∈carrier K. 0 ≤ (v x) ∧ (v' x) < 0"
apply (subgoal_tac "¬ (∀x∈carrier K. 0 ≤ (v x) ⟶ 0 ≤ (v' x))")
prefer 2
apply (rule contrapos_pp, simp+,
frule valuations_equiv[of "v" "v'"], assumption+,
simp add:val_equiv_axiom2[of v v'])
apply (simp, erule bexE, erule conjE, simp add:aneg_le)
apply blast
done
lemma (in Corps) field_op_minus:"⟦a ∈ carrier K; b ∈ carrier K; b ≠ 𝟬⟧ ⟹
-⇩a (a ⋅⇩r (b⇗‐K⇖)) = (-⇩a a) ⋅⇩r (b⇗‐K⇖)"
apply (cut_tac invf_closed1[of "b"], simp,
erule conjE, cut_tac field_is_ring,
simp add:Ring.ring_inv1[of "K" "a" "b⇗‐K⇖"], simp)
done
lemma (in Corps) field_one_plus_frac1:"⟦a ∈ carrier K; b ∈ carrier K; b ≠ 𝟬⟧
⟹ 1⇩r ± (a ⋅⇩r (b⇗‐K⇖)) = (b ± a) ⋅⇩r (b⇗‐K⇖)"
apply (cut_tac field_is_ring,
cut_tac invf_closed1[of b], simp+, erule conjE,
cut_tac field_is_idom)
apply (rule Idomain.idom_mult_cancel_r[of K "1⇩r ± (a ⋅⇩r (b⇗‐K⇖))"
"(b ± a) ⋅⇩r (b⇗‐K⇖)" "b"], assumption+,
frule Idomain.idom_is_ring[of "K"], frule Ring.ring_is_ag[of "K"],
rule aGroup.ag_pOp_closed [of "K"], assumption+,
simp add:Ring.ring_one,rule Ring.ring_tOp_closed, assumption+,
rule Ring.ring_tOp_closed, assumption+,
frule Ring.ring_is_ag[of "K"],
rule aGroup.ag_pOp_closed, assumption+,
subst Ring.ring_distrib2[of "K" "b"], assumption+,
simp add:Ring.ring_one, simp add:Ring.ring_tOp_closed,
simp add:Ring.ring_l_one) thm Ring.ring_distrib2[of K "b⇗‐K⇖"]
apply (subst Ring.ring_distrib2[of K "b⇗‐K⇖"], assumption+,
simp add:Ring.ring_tOp_commute[of "K" "b" "b⇗‐K⇖"],
subst linvf[of "b"], simp,
subst Ring.ring_distrib2[of "K" "b"], assumption+,
simp add:Ring.ring_one, simp add:Ring.ring_tOp_closed,
simp add:Ring.ring_l_one, simp)
done
lemma (in Corps) field_one_plus_frac2:"⟦a ∈ carrier K; b ∈ carrier K;
a ± b ≠ 𝟬⟧ ⟹ 1⇩r ± (-⇩a (a ⋅⇩r (a ± b)⇗‐K⇖)) = b ⋅⇩r ((a ± b)⇗‐K⇖)"
apply (frule field_op_minus[of "a" "a ± b"],
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
simp add:aGroup.ag_pOp_closed, assumption, simp,
thin_tac "-⇩a (a ⋅⇩r (a ± b)⇗‐ K⇖) = (-⇩a a) ⋅⇩r (a ± b)⇗‐ K⇖")
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule aGroup.ag_mOp_closed[of "K" "a"], assumption,
frule field_one_plus_frac1[of "-⇩a a" "a ± b"],
simp add:aGroup.ag_pOp_closed, simp, simp,
thin_tac "1⇩r ± (-⇩a a) ⋅⇩r (a ± b)⇗‐ K⇖ = (a ± b ± -⇩a a) ⋅⇩r (a ± b)⇗‐ K⇖",
simp add:aGroup.ag_pOp_assoc[of "K" "a" "b" "-⇩a a"],
simp add:aGroup.ag_pOp_commute[of "K" "b" "-⇩a a"],
simp add:aGroup.ag_pOp_assoc[THEN sym],
simp add:aGroup.ag_r_inv1,
simp add:aGroup.ag_l_zero)
done
lemma (in Corps) field_one_plus_frac3:"⟦x ∈ carrier K; x ≠ 1⇩r;
1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x) ≠ 𝟬 ⟧ ⟹
1⇩r ± -⇩a x ⋅⇩r (1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x))⇗‐ K⇖ =
(1⇩r ± -⇩a x^⇗K (Suc (Suc 0))⇖) ⋅⇩r (1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x))⇗‐ K⇖"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag, frule Ring.ring_one,
cut_tac invf_closed1[of "1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x)"], simp, erule conjE)
apply (subst Ring.ring_inv1_1, assumption+,
subst field_one_plus_frac1[of "-⇩a x" "1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x)"])
apply (rule aGroup.ag_mOp_closed, assumption+,
rule aGroup.ag_pOp_closed, assumption+,
rule Ring.ring_tOp_closed, assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+, rule aGroup.ag_mOp_closed,
assumption+,
subst Ring.ring_distrib1, assumption+,
rule aGroup.ag_mOp_closed, assumption+)
apply (simp add:Ring.ring_r_one)
apply (simp add:Ring.ring_inv1_2[THEN sym, of K x x])
apply (subgoal_tac "1⇩r ± (x ± -⇩a x ⋅⇩r x) ± -⇩a x = 1⇩r ± -⇩a x^⇗K (Suc (Suc 0))⇖",
simp,
frule Ring.ring_tOp_closed[of K x x], assumption+)
apply (frule Ring.ring_tOp_closed[of K x x], assumption+,
frule aGroup.ag_mOp_closed[of K "x ⋅⇩r x"], assumption+,
frule aGroup.ag_mOp_closed[of K x], assumption+)
apply (subst aGroup.ag_pOp_assoc, assumption+,
rule aGroup.ag_pOp_closed, assumption+)
apply (rule aGroup.ag_pOp_add_l[of K "x ± -⇩a x ⋅⇩r x ± -⇩a x"
"-⇩a x^⇗K (Suc (Suc 0))⇖" "1⇩r"], assumption+,
(rule aGroup.ag_pOp_closed, assumption+)+,
rule aGroup.ag_mOp_closed, assumption+, rule Ring.npClose,
assumption+,
subst aGroup.ag_pOp_commute, assumption+,
simp add:aGroup.ag_pOp_assoc aGroup.ag_r_inv1 aGroup.ag_r_zero)
apply (simp add:Ring.ring_l_one)
apply simp
apply (rule aGroup.ag_pOp_closed, assumption+,
rule Ring.ring_tOp_closed, assumption+,
rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed[of K x], assumption+)
done
lemma (in Corps) OstrowskiTr1:"⟦ valuation K v; s ∈ carrier K; t ∈ carrier K;
0 ≤ (v s); v t < 0⟧ ⟹ s ± t ≠ 𝟬"
apply (rule contrapos_pp, simp+,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
simp only:aGroup.ag_plus_zero[THEN sym, of "K" "s" "t"])
apply (simp add:val_minus_eq[of "v" "t"])
done
lemma (in Corps) OstrowskiTr2:"⟦valuation K v; s ∈ carrier K; t ∈ carrier K;
0 ≤ (v s); v t < 0⟧ ⟹ 0 < (v (1⇩r ± (-⇩a ((t ⋅⇩r ((s ± t)⇗‐K⇖))))))"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule OstrowskiTr1[of "v" "s" "t"], assumption+,
frule field_one_plus_frac2[of "t" "s"], assumption+,
simp add:aGroup.ag_pOp_commute)
apply (subst aGroup.ag_pOp_commute[of "K" "s" "t"], assumption+, simp,
simp add:aGroup.ag_pOp_commute[of "K" "t" "s"],
thin_tac "1⇩r ± -⇩a (t ⋅⇩r (s ± t)⇗‐ K⇖) = s ⋅⇩r (s ± t)⇗‐ K⇖",
frule aGroup.ag_pOp_closed[of "K" "s" "t"], assumption+,
cut_tac invf_closed1[of "s ± t"], simp, erule conjE)
apply (simp add:val_t2p,
simp add:value_of_inv,
frule aless_le_trans[of "v t" "0" "v s"], assumption+,
frule value_less_eq[THEN sym, of v t s], assumption+,
simp add:aGroup.ag_pOp_commute,
frule aless_diff_poss[of "v t" "v s"], simp add:diff_ant_def, simp)
done
lemma (in Corps) OstrowskiTr3:"⟦valuation K v; s ∈ carrier K; t ∈ carrier K;
0 ≤ (v t); v s < 0⟧ ⟹ 0 < (v (t ⋅⇩r (( s ± t)⇗‐K⇖)))"
apply (frule aless_le_trans[of "v s" "0" "v t"], assumption+,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule aGroup.ag_pOp_closed[of "K" "s" "t"], assumption+,
frule OstrowskiTr1[of v t s], assumption+,
frule value_less_eq[THEN sym, of v s t], assumption+)
apply (simp add:aGroup.ag_pOp_commute[of K t s],
cut_tac invf_closed1[of "s ± t"], simp) apply (
erule conjE, simp add:val_t2p[of v], simp add:value_of_inv)
apply (cut_tac aless_diff_poss[of "v s" "v t"],
simp add:diff_ant_def, simp+)
done
lemma (in Corps) restrict_Ostrowski_elem:"⟦ x ∈ carrier K;
Ostrowski_elem K (Suc (Suc n)) vv x⟧ ⟹ Ostrowski_elem K (Suc n) vv x"
apply (simp add:Ostrowski_elem_def,
erule conjE, rule ballI, simp add:nset_def,
insert lessI [of "Suc n"])
done
lemma (in Corps) restrict_vals_nonequiv:"vals_nonequiv K (Suc (Suc n)) vv ⟹
vals_nonequiv K (Suc n) vv"
apply (simp add:vals_nonequiv_def,
erule conjE, simp add:valuations_def)
done
lemma (in Corps) restrict_vals_nonequiv1:"vals_nonequiv K (Suc (Suc n)) vv ⟹
vals_nonequiv K (Suc n) (compose {h. h ≤ (Suc n)} vv (skip 1))"
apply (simp add:vals_nonequiv_def, (erule conjE)+,
rule conjI,
thin_tac "∀j≤Suc (Suc n). ∀l≤Suc (Suc n). j ≠ l ⟶
¬ v_equiv K (vv j) (vv l)",
simp add:valuations_def, rule allI, rule impI,
simp add:compose_def skip_def nset_def)
apply ((rule allI, rule impI)+, rule impI)
apply (simp add:compose_def skip_def nset_def)
done
lemma (in Corps) restrict_vals_nonequiv2:"⟦vals_nonequiv K (Suc (Suc n)) vv⟧
⟹ vals_nonequiv K (Suc n) (compose {j. j ≤ (Suc n)} vv (skip 2))"
apply (simp add:vals_nonequiv_def, (erule conjE)+,
rule conjI,
thin_tac "∀j≤Suc (Suc n). ∀l≤Suc (Suc n). j ≠ l ⟶
¬ v_equiv K (vv j) (vv l)",
simp add:valuations_def,
rule allI, rule impI)
apply (simp add:compose_def skip_def nset_def,
(rule allI, rule impI)+, rule impI,
simp add:compose_def skip_def nset_def)
done
lemma (in Corps) OstrowskiTr31:"⟦valuation K v; s ∈ carrier K;
0 < (v (1⇩r ± (-⇩a s)))⟧ ⟹ s ≠ 𝟬"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (rule contrapos_pp, simp+)
apply (simp add:aGroup.ag_inv_zero,
frule Ring.ring_one[of "K"], simp add:aGroup.ag_r_zero)
apply (simp add:value_of_one)
done
lemma (in Corps) OstrowskiTr32:"⟦valuation K v; s ∈ carrier K;
0 < (v (1⇩r ± (-⇩a s)))⟧ ⟹ 0 ≤ (v s)"
apply (rule contrapos_pp, simp+,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
simp add:aneg_le,
frule has_val_one_neq_zero[of "v"])
apply (frule OstrowskiTr31[of v s], assumption+,
frule not_sym,
frule Ring.ring_one[of "K"])
apply (frule value_less_eq[THEN sym, of v "-⇩a s" "1⇩r"],
simp add:aGroup.ag_mOp_closed, assumption+,
simp add:val_minus_eq)
apply (simp add:value_of_one,
frule aGroup.ag_mOp_closed[of "K" "s"], assumption+,
simp add:aGroup.ag_pOp_commute[of "K" "-⇩a s" "1⇩r"],
simp add:val_minus_eq)
done
lemma (in Corps) OstrowskiTr4:"⟦valuation K v; s ∈ carrier K; t ∈ carrier K;
0 < (v (1⇩r ± (-⇩a s))); 0 < (v (1⇩r ± (-⇩a t)))⟧ ⟹
0 < (v (1⇩r ± (-⇩a (s ⋅⇩r t))))"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Ring.ring_one[of "K"])
apply (subgoal_tac "1⇩r ± (-⇩a (s ⋅⇩r t)) =
1⇩r ± (-⇩a s) ± (s ⋅⇩r (1⇩r ± (-⇩a t)))", simp,
thin_tac "1⇩r ± -⇩a (s ⋅⇩r t) = 1⇩r ± -⇩a s ± s ⋅⇩r (1⇩r ± -⇩a t)")
apply (frule aGroup.ag_mOp_closed[of K s], assumption+,
frule aGroup.ag_pOp_closed[of K "1⇩r" "-⇩a s"], assumption+,
frule aGroup.ag_mOp_closed[of "K" "t"], assumption+,
frule aGroup.ag_pOp_closed[of "K" "1⇩r" "-⇩a t"], assumption+,
frule Ring.ring_tOp_closed[of "K" "s" "1⇩r ± (-⇩a t)"], assumption+,
frule amin_le_plus[of v "1⇩r ± (-⇩a s)" "s ⋅⇩r (1⇩r ± (-⇩a t))"], assumption+)
apply (frule amin_gt[of "0" "v (1⇩r ± -⇩a s)" "v (s ⋅⇩r (1⇩r ± -⇩a t))"])
apply (simp add:val_t2p,
frule OstrowskiTr32[of v s], assumption+,
rule aadd_pos_poss[of "v s" "v (1⇩r ± -⇩a t)"], assumption+,
simp add:Ring.ring_distrib1)
apply (frule aGroup.ag_mOp_closed[of K t], assumption,
simp add:Ring.ring_distrib1 Ring.ring_r_one,
frule aGroup.ag_mOp_closed[of K s], assumption+,
subst aGroup.pOp_assocTr43, assumption+,
simp add:Ring.ring_tOp_closed,
simp add:aGroup.ag_l_inv1 aGroup.ag_r_zero,
simp add:Ring.ring_inv1_2)
done
lemma (in Corps) OstrowskiTr5:"⟦ vals_nonequiv K (Suc (Suc n)) vv;
s ∈ carrier K; t ∈ carrier K;
0 ≤ (vv (Suc 0)) s ∧ 0 ≤ (vv (Suc (Suc 0))) t;
Ostrowski_elem K (Suc n) (compose {j. j ≤ (Suc n)} vv (skip 1)) s;
Ostrowski_elem K (Suc n) (compose {j. j ≤ (Suc n)} vv (skip 2)) t⟧ ⟹
Ostrowski_elem K (Suc (Suc n)) vv (s ⋅⇩r t)"
apply (erule conjE,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule_tac x = s and y = t in Ring.ring_tOp_closed[of "K"], assumption+,
frule skip_vals_nonequiv[of n "vv" "1"],
frule skip_vals_nonequiv[of n "vv" "2"],
subst Ostrowski_elem_def, rule conjI)
apply (rule OstrowskiTr4,
simp add:vals_nonequiv_valuation[of "Suc (Suc n)" "vv" "0"],
assumption+,
frule Ostrowski_elem_0[of "Suc n"
"compose {j. j ≤ (Suc n)} vv (skip 1)" "s"], assumption+,
simp add:skip_def compose_def,
frule Ostrowski_elem_0[of "Suc n"
"compose {j. j ≤ (Suc n)} vv (skip 2)" "t"], assumption+,
simp add:skip_def compose_def)
apply (rule ballI,
case_tac "j = Suc 0",
frule_tac j = " Suc 0" in Ostrowski_elem_Suc[of "Suc n"
"compose {j. j ≤ (Suc n)} vv (skip 2)" "t"], assumption+,
simp add:nset_def) apply (
thin_tac "Ostrowski_elem K (Suc n) (compose {j. j ≤ Suc n} vv (skip 1)) s",
thin_tac "Ostrowski_elem K (Suc n) (compose {j. j ≤ Suc n} vv (skip 2)) t",
thin_tac "vals_nonequiv K (Suc n) (compose {l. l ≤ Suc n} vv (skip 1))",
frule vals_nonequiv_valuation[of "Suc n"
"compose {j. j ≤ (Suc n)} vv (skip 2)" "Suc 0"])
apply simp+
apply (simp add:skip_def compose_def,
simp add:val_t2p, simp add:aadd_pos_poss)
apply (case_tac "j = Suc (Suc 0)",
frule vals_nonequiv_valuation[of "Suc n"
"compose {j. j ≤ Suc n} vv (skip 1)" "Suc 0"],
simp,
frule_tac j = " Suc 0" in Ostrowski_elem_Suc[of "Suc n"
"compose {j. j ≤ (Suc n)} vv (skip 1)" "s"],
assumption+, simp add:nset_def,
simp add:skip_def compose_def,
simp add:val_t2p, rule aadd_poss_pos, assumption+)
apply (frule_tac j = j in nsetTr1[of _ "Suc 0" "Suc (Suc n)"], assumption,
frule_tac j = j in nsetTr2[of _ "Suc 0" "Suc n"],
thin_tac "j ∈ nset (Suc (Suc 0)) (Suc (Suc n))",
frule_tac j = "j - Suc 0" in Ostrowski_elem_Suc[of "Suc n"
"compose {j. j ≤ (Suc n)} vv (skip 1)" "s"], assumption+)
apply (frule_tac j = "j - Suc 0" in Ostrowski_elem_Suc[of "Suc n"
"compose {j. j ≤ (Suc n)} vv (skip 2)" "t"], assumption+,
thin_tac "Ostrowski_elem K (Suc n) (compose {j. j ≤ (Suc n)} vv (skip 1)) s",
thin_tac "Ostrowski_elem K (Suc n) (compose {j. j ≤ (Suc n)} vv (skip 2)) t",
thin_tac "vals_nonequiv K (Suc n) (compose {j. j ≤ (Suc n)} vv (skip 1))",
thin_tac "vals_nonequiv K (Suc n) (compose {j. j ≤ (Suc n)} vv (skip 2))")
apply (simp add:compose_def skip_def nset_def,
(erule conjE)+, simp, subgoal_tac "¬ (j - Suc 0 ≤ Suc 0)", simp)
apply (frule_tac m = j in vals_nonequiv_valuation[of "Suc (Suc n)"],
assumption+,
simp add:val_t2p,
rule_tac x = "vv j s" and y = "vv j t" in aadd_pos_poss,
simp add:aless_imp_le, assumption)
apply simp
done
lemma (in Corps) one_plus_x_nonzero:"⟦valuation K v; x ∈ carrier K; v x < 0⟧
⟹ 1⇩r ± x ∈ carrier K ∧ v (1⇩r ± x) < 0"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Ring.ring_one[of "K"],
frule aGroup.ag_pOp_closed[of "K" "1⇩r" "x"], assumption+,
simp)
apply (frule value_less_eq[of "v" "x" "1⇩r"], assumption+,
simp add:value_of_one, simp add:aGroup.ag_pOp_commute)
done
lemma (in Corps) val_neg_nonzero:"⟦valuation K v; x ∈ carrier K; v x < 0⟧ ⟹
x ≠ 𝟬"
apply (rule contrapos_pp, simp+, simp add:value_of_zero)
apply (frule aless_imp_le[of "∞" "0"],
cut_tac inf_ge_any[of "0"],
frule ale_antisym[of "0" "∞"], assumption+, simp)
done
lemma (in Corps) OstrowskiTr6:"⟦valuation K v; x ∈ carrier K; ¬ 0 ≤ (v x)⟧ ⟹
(1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x)) ∈ carrier K - {𝟬}"
apply (simp add:aneg_le,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule aGroup.ag_mOp_closed[of "K" "x"], assumption+,
frule one_plus_x_nonzero[of "v" "-⇩a x"], assumption+,
simp add:val_minus_eq, erule conjE)
apply (rule conjI,
rule aGroup.ag_pOp_closed[of "K"], assumption+,
simp add:Ring.ring_one, rule Ring.ring_tOp_closed[of "K"], assumption+)
apply (frule val_t2p[of v x "1⇩r ± (-⇩a x)"], assumption+,
frule val_neg_nonzero[of v x], assumption+,
frule val_nonzero_z[of v x], assumption+, erule exE,
frule_tac z = z in aadd_less_mono_z[of "v (1⇩r ± (-⇩a x))" "0"],
simp add:aadd_0_l,
simp only:aadd_commute[of "v (1⇩r ± -⇩a x)"],
frule_tac x = "ant z + v (1⇩r ± -⇩a x)" and y ="ant z" in
aless_trans[of _ _ "0"], assumption,
drule sym, simp)
apply (frule_tac x = x and y = "1⇩r ± -⇩a x" in Ring.ring_tOp_closed[of "K"],
assumption+,
frule one_plus_x_nonzero[of v "x ⋅⇩r (1⇩r ± (-⇩a x))"],
assumption+, erule conjE,
rule val_neg_nonzero[of v], assumption+)
done
lemma (in Corps) OstrowskiTr7:"⟦valuation K v; x ∈ carrier K; ¬ 0 ≤ (v x)⟧ ⟹
1⇩r ± -⇩a (x ⋅⇩r ((1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x))⇗‐K⇖)) =
(1⇩r ± -⇩a x ± x ⋅⇩r (1⇩r ± -⇩a x)) ⋅⇩r ((1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x))⇗‐K⇖)"
apply (cut_tac field_is_ring,
frule OstrowskiTr6[of v x], assumption+, simp, erule conjE,
cut_tac field_is_idom,
cut_tac invf_closed1[of "1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x)"], simp,
frule Ring.ring_is_ag[of "K"],
frule aGroup.ag_mOp_closed[of "K" "x"], assumption+,
frule Ring.ring_one[of "K"],
frule aGroup.ag_pOp_closed[of "K" "1⇩r" "-⇩a x"], assumption+,
rule Idomain.idom_mult_cancel_r[of K "1⇩r ± -⇩a (x ⋅⇩r ((1⇩r ± x ⋅⇩r
(1⇩r ± -⇩a x))⇗‐K⇖))" "(1⇩r ± -⇩a x ± x ⋅⇩r (1⇩r ± -⇩a x)) ⋅⇩r
((1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x))⇗‐K⇖)" "(1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x))"],
assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+, rule aGroup.ag_mOp_closed,
assumption+,
rule Ring.ring_tOp_closed, assumption+, simp, rule Ring.ring_tOp_closed,
assumption+,
(rule aGroup.ag_pOp_closed, assumption+)+,
rule Ring.ring_tOp_closed, assumption+, simp, assumption+,
subst Ring.ring_tOp_assoc, assumption+,
rule aGroup.ag_pOp_closed, assumption+,
simp add:Ring.ring_tOp_closed, simp, simp)
apply (subst linvf[of "1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x)"], simp,
(subst Ring.ring_distrib2, assumption+)+, erule conjE)
apply (rule aGroup.ag_mOp_closed, assumption,
rule Ring.ring_tOp_closed, assumption+,
subst Ring.ring_r_one, assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+,
rule Ring.ring_tOp_closed, assumption+,
erule conjE,
simp add:Ring.ring_inv1_1,
simp add:Ring.ring_tOp_assoc[of K "-⇩a x" "(1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x))⇗‐ K⇖"],
simp add:linvf, simp add:Ring.ring_r_one Ring.ring_l_one,
frule Ring.ring_tOp_closed[of K x "1⇩r ± -⇩a x"], assumption+,
simp add:aGroup.ag_pOp_assoc, simp add:aGroup.ag_pOp_commute)
apply simp
done
lemma (in Corps) Ostrowski_elem_nonzero:"⟦vals_nonequiv K (Suc n) vv;
x ∈ carrier K; Ostrowski_elem K (Suc n) vv x⟧ ⟹ x ≠ 𝟬"
apply (simp add:Ostrowski_elem_def,
frule conjunct1, fold Ostrowski_elem_def,
frule vals_nonequiv_valuation[of "Suc n" "vv" "0"], simp)
apply (rule contrapos_pp, simp+,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
simp add:aGroup.ag_inv_zero, frule Ring.ring_one[of "K"],
simp add:aGroup.ag_r_zero, simp add:value_of_one)
done
lemma (in Corps) Ostrowski_elem_not_one:"⟦vals_nonequiv K (Suc n) vv;
x ∈ carrier K; Ostrowski_elem K (Suc n) vv x⟧ ⟹ 1⇩r ± -⇩a x ≠ 𝟬"
apply (frule vals_nonequiv_valuation [of "Suc n" "vv" "Suc 0"],
simp,
simp add:Ostrowski_elem_def, frule conjunct2,
fold Ostrowski_elem_def)
apply (subgoal_tac "0 < (vv (Suc 0) x)",
rule contrapos_pp, simp+,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Ring.ring_one[of "K"],
simp only:aGroup.ag_eq_diffzero[THEN sym, of "K" "1⇩r" "x"],
drule sym, simp, simp add:value_of_one,
subgoal_tac "Suc 0 ∈ nset (Suc 0) (Suc n)", simp,
simp add:nset_def)
done
lemma (in Corps) val_unit_cond:"⟦ valuation K v; x ∈ carrier K;
0 < (v (1⇩r ± -⇩a x))⟧ ⟹ v x = 0"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Ring.ring_one[of "K"])
apply (frule aGroup.ag_mOp_closed[of "K" "1⇩r"], assumption+,
frule has_val_one_neq_zero[of v])
apply (frule aGroup.ag_pOp_assoc[of "K" "-⇩a 1⇩r" "1⇩r" "-⇩a x"], assumption+,
simp add:aGroup.ag_mOp_closed, simp add:aGroup.ag_l_inv1,
frule aGroup.ag_mOp_closed[of "K" "x"], assumption+,
simp add:aGroup.ag_l_zero)
apply (subgoal_tac "v (-⇩a x) = v ( -⇩a 1⇩r ± (1⇩r ± -⇩a x))") prefer 2
apply simp
apply (thin_tac "-⇩a x = -⇩a 1⇩r ± (1⇩r ± -⇩a x)",
frule value_less_eq[of "v" "-⇩a 1⇩r" "1⇩r ± -⇩a x"],
assumption+,
rule aGroup.ag_pOp_closed, assumption+,
simp add:val_minus_eq value_of_one, simp add:val_minus_eq)
apply (simp add: value_of_one)
done
end
Theory Valuation2
theory Valuation2
imports Valuation1
begin
lemma (in Corps) OstrowskiTr8:"⟦valuation K v; x ∈ carrier K;
0 < v (1⇩r ± -⇩a x)⟧ ⟹
0 < (v (1⇩r ± -⇩a (x ⋅⇩r ((1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x))⇗‐K⇖))))"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (frule aGroup.ag_mOp_closed[of "K" "x"], assumption+,
frule Ring.ring_one[of "K"],
frule aGroup.ag_pOp_closed[of "K" "1⇩r" " -⇩a x"], assumption+,
frule OstrowskiTr32[of v x], assumption+)
apply (case_tac "x = 1⇩r⇘K⇙", simp,
simp add:aGroup.ag_r_inv1, simp add:Ring.ring_times_x_0,
simp add:aGroup.ag_r_zero, cut_tac val_field_1_neq_0,
cut_tac invf_one, simp, simp add:Ring.ring_r_one,
simp add:aGroup.ag_r_inv1, assumption+)
apply (frule aGroup.ag_pOp_closed[of K "1⇩r" "x ⋅⇩r (1⇩r ± -⇩a x)"], assumption+,
rule Ring.ring_tOp_closed, assumption+)
apply (cut_tac invf_closed[of "1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x)"])
apply (cut_tac field_one_plus_frac3[of x], simp del:npow_suc,
subst val_t2p[of v], assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+, rule Ring.npClose,
assumption+,
thin_tac "1⇩r ± -⇩a x ⋅⇩r (1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x))⇗‐ K⇖ =
(1⇩r ± -⇩a x^⇗K (Suc (Suc 0))⇖) ⋅⇩r (1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x))⇗‐ K⇖",
subgoal_tac "1⇩r ± -⇩a x^⇗K (Suc (Suc 0))⇖ = (1⇩r ± x) ⋅⇩r (1⇩r ± -⇩a x)",
simp del:npow_suc,
thin_tac "1⇩r ± -⇩a x^⇗K (Suc (Suc 0))⇖ = (1⇩r ± x) ⋅⇩r (1⇩r ± -⇩a x)")
apply (subst val_t2p[of v], assumption+,
rule aGroup.ag_pOp_closed, assumption+,
subst value_of_inv[of v "1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x)"], tactic ‹CHANGED distinct_subgoals_tac›, assumption+)
apply (rule contrapos_pp, simp+,
frule Ring.ring_tOp_closed[of K x "(1⇩r ± -⇩a x)"], assumption+,
simp add:aGroup.ag_pOp_commute[of K "1⇩r"],
frule aGroup.ag_eq_diffzero[THEN sym, of K "x ⋅⇩r (-⇩a x ± 1⇩r)" "-⇩a 1⇩r"],
assumption+, rule aGroup.ag_mOp_closed, assumption+)
apply (simp add:aGroup.ag_inv_inv[of K "1⇩r"],
frule eq_elems_eq_val[of "x ⋅⇩r (-⇩a x ± 1⇩r)" "-⇩a 1⇩r" v],
thin_tac "x ⋅⇩r (-⇩a x ± 1⇩r) = -⇩a 1⇩r",
simp add:val_minus_eq value_of_one)
apply (simp add:val_t2p,
frule aadd_pos_poss[of "v x" "v (-⇩a x ± 1⇩r)"], assumption+,
simp,
subst value_less_eq[THEN sym, of v "1⇩r" "x ⋅⇩r (1⇩r ± -⇩a x)"],
assumption+,
rule Ring.ring_tOp_closed, assumption+,
simp add:value_of_one, subst val_t2p[of v], assumption+,
rule aadd_pos_poss[of "v x" "v (1⇩r ± -⇩a x)"], assumption+,
simp add:value_of_one,
cut_tac aadd_pos_poss[of "v (1⇩r ± x)" "v (1⇩r ± -⇩a x)"],
simp add:aadd_0_r, rule val_axiom4, assumption+)
apply (subst Ring.ring_distrib2, assumption+, simp add:Ring.ring_l_one,
subst Ring.ring_distrib1, assumption+, simp add:Ring.ring_r_one,
subst aGroup.pOp_assocTr43, assumption+,
rule Ring.ring_tOp_closed, assumption+,
simp add:aGroup.ag_l_inv1 aGroup.ag_r_zero,
subst Ring.ring_inv1_2, assumption+, simp, assumption+)
apply simp
apply (rule contrapos_pp, simp+,
frule Ring.ring_tOp_closed[of K x "(1⇩r ± -⇩a x)"], assumption+,
simp add:aGroup.ag_pOp_commute[of K "1⇩r"],
frule aGroup.ag_eq_diffzero[THEN sym, of K "x ⋅⇩r (-⇩a x ± 1⇩r)" "-⇩a 1⇩r"],
assumption+, rule aGroup.ag_mOp_closed, assumption+)
apply (simp add:aGroup.ag_inv_inv[of K "1⇩r"],
frule eq_elems_eq_val[of "x ⋅⇩r (-⇩a x ± 1⇩r)" "-⇩a 1⇩r" v],
thin_tac "x ⋅⇩r (-⇩a x ± 1⇩r) = -⇩a 1⇩r",
simp add:val_minus_eq value_of_one,
simp add:val_t2p,
frule aadd_pos_poss[of "v x" "v (-⇩a x ± 1⇩r)"], assumption+,
simp)
done
lemma (in Corps) OstrowskiTr9:"⟦valuation K v; x ∈ carrier K; 0 < (v x)⟧ ⟹
0 < (v (x ⋅⇩r ((1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x))⇗‐K⇖)))"
apply (subgoal_tac "1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x) ≠ 𝟬")
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule aGroup.ag_mOp_closed[of "K" "x"], assumption+,
frule Ring.ring_one[of "K"],
frule aGroup.ag_pOp_closed[of "K" "1⇩r" "-⇩a x"], assumption+,
subst val_t2p, assumption+,
cut_tac invf_closed1[of "1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x)"], simp)
apply simp
apply (rule aGroup.ag_pOp_closed, assumption+,
rule Ring.ring_tOp_closed, assumption+)
apply (subst value_of_inv[of v "1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x)"], assumption+,
rule aGroup.ag_pOp_closed, assumption+,
rule Ring.ring_tOp_closed, assumption+,
frule value_less_eq[THEN sym, of v "1⇩r" "-⇩a x"], assumption+,
simp add:value_of_one, simp add:val_minus_eq,
subst value_less_eq[THEN sym, of v "1⇩r" "x ⋅⇩r (1⇩r ± -⇩a x)"],
assumption+, rule Ring.ring_tOp_closed, assumption+,
simp add:value_of_one, subst val_t2p, assumption+,
subst aadd_commute,
rule aadd_pos_poss[of "v (1⇩r ± -⇩a x)" "v x"],
simp, assumption, simp add:value_of_one,
simp add:aadd_0_r)
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of K],
frule Ring.ring_one,
rule contrapos_pp, simp+,
frule Ring.ring_tOp_closed[of K x "(1⇩r ± -⇩a x)"], assumption+,
rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+,
frule aGroup.ag_mOp_closed[of K x], assumption+)
apply (simp add:aGroup.ag_pOp_commute[of K "1⇩r"],
frule aGroup.ag_eq_diffzero[THEN sym, of K "x ⋅⇩r (-⇩a x ± 1⇩r)" "-⇩a 1⇩r"],
simp add:aGroup.ag_pOp_commute,
rule aGroup.ag_mOp_closed, assumption+,
simp add:aGroup.ag_inv_inv,
frule eq_elems_eq_val[of "x ⋅⇩r (-⇩a x ± 1⇩r)" "-⇩a 1⇩r" v],
thin_tac "x ⋅⇩r (-⇩a x ± 1⇩r) = -⇩a 1⇩r",
simp add:val_minus_eq value_of_one,
frule_tac aGroup.ag_pOp_closed[of K "-⇩a x" "1⇩r"], assumption+,
simp add:val_t2p)
apply (simp add:aadd_commute[of "v x"],
cut_tac aadd_pos_poss[of "v (-⇩a x ± 1⇩r)" "v x"], simp,
subst aGroup.ag_pOp_commute, assumption+,
subst value_less_eq[THEN sym, of v "1⇩r" "-⇩a x"], assumption+,
simp add:value_of_one val_minus_eq, simp add:value_of_one)
apply assumption
done
lemma (in Corps) OstrowskiTr10:"⟦valuation K v; x ∈ carrier K;
¬ 0 ≤ v x⟧ ⟹ 0 < (v (x ⋅⇩r ((1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x))⇗‐K⇖)))"
apply (frule OstrowskiTr6[of "v" "x"], assumption+,
cut_tac invf_closed1[of "1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x)"], simp,
erule conjE, simp add:aneg_le, frule val_neg_nonzero[of "v" "x"],
(erule conjE)+, assumption+, erule conjE)
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule aGroup.ag_mOp_closed[of "K" "x"], assumption+,
frule Ring.ring_one[of "K"],
frule aGroup.ag_pOp_closed[of "K" "1⇩r" "-⇩a x"], assumption+,
subst val_t2p, assumption+)
apply (subst value_of_inv[of "v" "1⇩r ± x ⋅⇩r (1⇩r ± -⇩a x)"],
assumption+, subst aGroup.ag_pOp_commute[of "K" "1⇩r"], assumption+,
rule Ring.ring_tOp_closed, assumption+,
subst value_less_eq[THEN sym, of v
"x ⋅⇩r (1⇩r ± -⇩a x)" "1⇩r"], assumption+)
apply (rule Ring.ring_tOp_closed, assumption+, simp add:value_of_one,
frule one_plus_x_nonzero[of "v" "-⇩a x"], assumption,
simp add:val_minus_eq, erule conjE, simp,
subst val_t2p[of "v"], assumption+, simp add:aadd_two_negg)
apply (simp add:val_t2p,
frule value_less_eq[THEN sym, of "v" "-⇩a x" "1⇩r"], assumption+,
simp add:value_of_one, simp add:val_minus_eq,
simp add:val_minus_eq, simp add:aGroup.ag_pOp_commute[of "K" "-⇩a x"],
frule val_nonzero_z[of "v" "x"], assumption+, erule exE,
simp add:a_zpz aminus, simp add:ant_0[THEN sym] aless_zless,
assumption)
done
lemma (in Corps) Ostrowski_first:"vals_nonequiv K (Suc 0) vv
⟹ ∃x∈carrier K. Ostrowski_elem K (Suc 0) vv x"
apply (simp add:vals_nonequiv_def,
cut_tac Nset_Suc0, (erule conjE)+,
simp add:valuations_def)
apply (rotate_tac -1,
frule_tac a = 0 in forall_spec, simp,
rotate_tac -1,
drule_tac a = "Suc 0" in forall_spec, simp)
apply (drule_tac a = "Suc 0" in forall_spec, simp,
rotate_tac -1,
drule_tac a = 0 in forall_spec, simp, simp)
apply (frule_tac a = 0 in forall_spec, simp,
drule_tac a = "Suc 0" in forall_spec, simp,
frule_tac v = "vv 0" and v' = "vv (Suc 0)" in
nonequiv_ex_Ostrowski_elem, assumption+,
erule bexE)
apply (erule conjE,
frule_tac v = "vv (Suc 0)" and v' = "vv 0" in
nonequiv_ex_Ostrowski_elem, assumption+,
erule bexE,
thin_tac "¬ v_equiv K (vv (Suc 0)) (vv 0)",
thin_tac "¬ v_equiv K (vv 0) (vv (Suc 0))")
apply (rename_tac s t)
apply (erule conjE,
frule_tac x = t and v = "vv 0" in val_neg_nonzero, assumption+)
apply (simp add:less_ant_def, (erule conjE)+,
frule_tac x = s and v = "vv (Suc 0)" in val_neg_nonzero,
assumption+, unfold less_ant_def)
apply (rule conjI, assumption+)
apply (frule_tac s = s and t = t and v = "vv 0" in OstrowskiTr2,
assumption+, rule ale_neq_less, assumption+)
apply (frule_tac s = s and t = t and v = "vv (Suc 0)" in OstrowskiTr3,
assumption+, rule ale_neq_less, assumption+)
apply (subgoal_tac "t ⋅⇩r (( s ± t)⇗‐K⇖) ∈ carrier K",
simp only:Ostrowski_elem_def,
simp only: nset_m_m[of "Suc 0"], blast)
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
rule Ring.ring_tOp_closed, assumption+,
frule_tac s = s and t = t and v = "vv 0" in OstrowskiTr1,
assumption+, rule ale_neq_less, assumption+,
frule_tac x = s and y = t in aGroup.ag_pOp_closed[of "K"], assumption+)
apply (cut_tac x = "s ± t" in invf_closed, blast)
apply assumption
done
lemma (in Corps) Ostrowski:"∀vv. vals_nonequiv K (Suc n) vv ⟶
(∃x∈carrier K. Ostrowski_elem K (Suc n) vv x)"
apply (induct_tac n,
rule allI, rule impI, simp add:Ostrowski_first)
apply (rule allI, rule impI,
frule_tac n = n and vv = vv in restrict_vals_nonequiv1,
frule_tac n = n and vv = vv in restrict_vals_nonequiv2,
frule_tac a = "compose {h. h ≤ Suc n} vv (skip 1)" in forall_spec,
assumption,
drule_tac a = "compose {h. h ≤ Suc n} vv (skip 2)" in forall_spec,
assumption+, (erule bexE)+)
apply (rename_tac n vv s t,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (frule_tac x = s and y = t in Ring.ring_tOp_closed[of "K"], assumption+,
case_tac "0 ≤ vv (Suc 0) s ∧ 0 ≤ vv (Suc (Suc 0)) t",
frule_tac vv = vv and s = s and t = t in OstrowskiTr5, assumption+)
apply blast
apply (simp,
case_tac "0 ≤ (vv (Suc 0) s)", simp,
frule_tac n = "Suc (Suc n)" and m = "Suc (Suc 0)" and vv = vv in
vals_nonequiv_valuation,
simp,
frule_tac v = "vv (Suc (Suc 0))" and x = t in OstrowskiTr6,
assumption+,
frule_tac x = "1⇩r ± t ⋅⇩r (1⇩r ± -⇩a t)" in invf_closed1,
frule_tac x = t and y = "(1⇩r ± t ⋅⇩r (1⇩r ± -⇩a t))⇗‐K⇖" in
Ring.ring_tOp_closed, assumption+, simp)
apply (subgoal_tac "Ostrowski_elem K (Suc (Suc n)) vv
(t ⋅⇩r ((1⇩r ± t ⋅⇩r (1⇩r ± (-⇩a t)))⇗‐K⇖))",
blast)
apply (subst Ostrowski_elem_def,
rule conjI,
thin_tac "Ostrowski_elem K (Suc n)
(compose {h. h ≤ Suc n} vv (skip (Suc 0))) s",
thin_tac "vals_nonequiv K (Suc n)
(compose {h. h ≤ Suc n} vv (skip (Suc 0)))",
thin_tac "vals_nonequiv K (Suc n) (compose {h. h≤ Suc n} vv (skip 2))",
thin_tac "0 ≤ (vv (Suc 0) s)",
frule_tac n = "Suc (Suc n)" and vv = vv and m = 0 in
vals_nonequiv_valuation, simp,
rule_tac v = "vv 0" and x = t in
OstrowskiTr8, assumption+)
apply (simp add:Ostrowski_elem_def, (erule conjE)+,
thin_tac "∀j∈nset (Suc 0) (Suc n).
0 < (compose {h. h ≤ (Suc n)} vv (skip 2) j t)",
simp add:compose_def skip_def,
rule ballI,
thin_tac "0 ≤ (vv (Suc 0) s)",
thin_tac "Ostrowski_elem K (Suc n)
(compose {h. h ≤ (Suc n)} vv (skip (Suc 0))) s",
frule_tac n = "Suc (Suc n)" and vv = vv and m = j in
vals_nonequiv_valuation,
simp add:nset_def, simp add:Ostrowski_elem_def, (erule conjE)+)
apply (case_tac "j = Suc 0", simp,
drule_tac x = "Suc 0" in bspec,
simp add:nset_def,
simp add:compose_def skip_def,
rule_tac v = "vv (Suc 0)" and x = t in
OstrowskiTr9, assumption+,
frule_tac j = j and n = n in nset_Tr51, assumption+,
drule_tac x = "j - Suc 0" in bspec, assumption+,
simp add:compose_def skip_def)
apply (case_tac "j = Suc (Suc 0)", simp) apply (
rule_tac v = "vv (Suc (Suc 0))" and x = t in OstrowskiTr10,
assumption+) apply (
subgoal_tac "¬ j - Suc 0 ≤ Suc 0", simp add:nset_def) apply(
rule_tac v = "vv j" and x = t in
OstrowskiTr9) apply (simp add:nset_def, assumption+)
apply (simp add:nset_def, (erule conjE)+, rule nset_Tr52, assumption+,
thin_tac "vals_nonequiv K (Suc n)
(compose {h. h ≤ (Suc n)} vv (skip (Suc 0)))",
thin_tac "vals_nonequiv K (Suc n)
(compose {h. h ≤ (Suc n)} vv (skip 2))",
thin_tac "Ostrowski_elem K (Suc n)
(compose {h. h ≤(Suc n)} vv (skip 2)) t")
apply (subgoal_tac "s ⋅⇩r ((1⇩r ± s ⋅⇩r (1⇩r ± -⇩a s))⇗‐K⇖) ∈ carrier K",
subgoal_tac "Ostrowski_elem K (Suc (Suc n)) vv
(s ⋅⇩r ((1⇩r ± s ⋅⇩r (1⇩r ± -⇩a s))⇗‐K⇖))", blast)
prefer 2
apply (frule_tac n = "Suc (Suc n)" and m = "Suc 0" and vv = vv in
vals_nonequiv_valuation, simp,
frule_tac v = "vv (Suc 0)" and x = s in OstrowskiTr6, assumption+,
rule Ring.ring_tOp_closed, assumption+,
frule_tac x = "1⇩r ± s ⋅⇩r (1⇩r ± -⇩a s)" in invf_closed1, simp,
simp add:Ostrowski_elem_def)
apply (rule conjI)
apply (rule_tac v = "vv 0" and x = s in OstrowskiTr8,
simp add:vals_nonequiv_valuation, assumption+)
apply (
thin_tac "vals_nonequiv K (Suc (Suc n)) vv",
(erule conjE)+,
thin_tac "∀j∈nset (Suc 0) (Suc n).
0 < (compose {h. h ≤ (Suc n)} vv (skip (Suc 0)) j s)",
simp add:compose_def skip_def, rule ballI)
apply (case_tac "j = Suc 0", simp,
rule_tac v = "vv (Suc 0)" and x = s in OstrowskiTr10,
simp add:vals_nonequiv_valuation, assumption+,
rule_tac v = "vv j" and x = s in OstrowskiTr9,
simp add:vals_nonequiv_valuation nset_def, assumption,
(erule conjE)+, simp add:compose_def skip_def,
frule_tac j = j in nset_Tr51, assumption+,
drule_tac x = "j - Suc 0" in bspec, assumption+)
apply (simp add:nset_def)
done
lemma (in Corps) val_1_nonzero:"⟦valuation K v; x ∈ carrier K; v x = 1⟧ ⟹
x ≠ 𝟬"
apply (rule contrapos_pp, simp+,
simp add:value_of_zero,
rotate_tac 3, drule sym, simp only:ant_1[THEN sym],
simp del:ant_1)
done
lemma (in Corps) Approximation1_5Tr1:"⟦vals_nonequiv K (Suc n) vv;
n_val K (vv 0) = vv 0; a ∈ carrier K; vv 0 a = 1; x ∈ carrier K;
Ostrowski_elem K (Suc n) vv x⟧ ⟹
∀m. 2 ≤ m ⟶ vv 0 ((1⇩r ± -⇩a x)^⇗K m⇖ ± a ⋅⇩r (x^⇗K m⇖)) = 1"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Ring.ring_one[of "K"],
rule allI, rule impI,
frule vals_nonequiv_valuation[of "Suc n" "vv" "0"],
simp,
simp add:Ostrowski_elem_def, frule conjunct1, fold Ostrowski_elem_def,
frule val_1_nonzero[of "vv 0" "a"], assumption+)
apply (frule vals_nonequiv_valuation[of "Suc n" "vv" "0"], simp,
frule val_nonzero_noninf[of "vv 0" "a"], assumption+,
frule val_unit_cond[of "vv 0" "x"], assumption+,
frule_tac n = m in Ring.npClose[of "K" "x"], assumption+,
frule aGroup.ag_mOp_closed[of "K" "x"], assumption+,
frule aGroup.ag_pOp_closed[of "K" "1⇩r" "-⇩a x"], assumption+)
apply (subgoal_tac "0 < m",
frule_tac x = "a ⋅⇩r (x^⇗K m⇖)" and y = "(1⇩r ± -⇩a x)^⇗K m⇖" in
value_less_eq[of "vv 0"],
rule Ring.ring_tOp_closed, assumption+,
rule Ring.npClose, assumption+, simp add: val_t2p,
frule value_zero_nonzero[of "vv 0" "x"], assumption+,
simp add:val_exp_ring[THEN sym], simp add:asprod_n_0 aadd_0_r)
apply (case_tac "x = 1⇩r⇘K⇙", simp add:aGroup.ag_r_inv1,
frule_tac n = m in Ring.npZero_sub[of "K"], simp,
simp add:value_of_zero)
apply (cut_tac inf_ge_any[of "1"], simp add: less_le)
apply (rotate_tac -1, drule not_sym,
frule aGroup.ag_neq_diffnonzero[of "K" "1⇩r" "x"],
simp add:Ring.ring_one[of "K"], assumption+, simp,
simp add:val_exp_ring[THEN sym],
cut_tac n1 = m in of_nat_0_less_iff[THEN sym])
apply (cut_tac a = "0 < m" and b = "0 < int m" in a_b_exchange, simp,
assumption)
apply (thin_tac "(0 < m) = (0 < int m)",
frule val_nonzero_z[of "vv 0" "1⇩r ± -⇩a x"], assumption+,
erule exE, simp, simp add:asprod_amult a_z_z,
simp only:ant_1[THEN sym], simp only:aless_zless, simp add:ge2_zmult_pos)
apply (subst aGroup.ag_pOp_commute[of "K"], assumption+,
rule Ring.npClose, assumption+, rule Ring.ring_tOp_closed[of "K"],
assumption+,
rotate_tac -1, drule sym, simp,
thin_tac "vv 0 (a ⋅⇩r x^⇗K m⇖ ± (1⇩r ± -⇩a x)^⇗K m⇖) = vv 0 (a ⋅⇩r x^⇗K m⇖)")
apply (simp add:val_t2p,
frule value_zero_nonzero[of "vv 0" "x"], assumption+,
simp add:val_exp_ring[THEN sym], simp add:asprod_n_0,
simp add:aadd_0_r,
cut_tac z = m in less_le_trans[of "0" "2"], simp, assumption+)
done
lemma (in Corps) Approximation1_5Tr3:"⟦vals_nonequiv K (Suc n) vv;
x ∈ carrier K; Ostrowski_elem K (Suc n) vv x; j ∈ nset (Suc 0) (Suc n)⟧
⟹ vv j ((1⇩r ± -⇩a x)^⇗K m⇖) = 0"
apply (frule Ostrowski_elem_not_one[of "n" "vv" "x"], assumption+,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Ring.ring_one[of "K"],
frule aGroup.ag_pOp_closed[of "K" "1⇩r" "-⇩a x"], assumption+)
apply (simp add:aGroup.ag_mOp_closed, simp add:nset_def,
frule_tac m = j in vals_nonequiv_valuation[of "Suc n" "vv"],
simp,
frule_tac v1 = "vv j" and x1 = "1⇩r ± -⇩a x" and n1 = m in
val_exp_ring[THEN sym], assumption+)
apply (frule_tac v = "vv j" and x = "1⇩r" and y = "-⇩a x" in
value_less_eq, assumption+, simp add:aGroup.ag_mOp_closed)
apply(simp add:value_of_one, simp add:val_minus_eq,
simp add:Ostrowski_elem_def nset_def)
apply (simp add:value_of_one, rotate_tac -1, drule sym,
simp add:asprod_n_0)
done
lemma (in Corps) Approximation1_5Tr4:"⟦vals_nonequiv K (Suc n) vv;
aa ∈ carrier K; x ∈ carrier K;
Ostrowski_elem K (Suc n) vv x; j ≤ (Suc n)⟧ ⟹
vv j (aa ⋅⇩r (x^⇗K m⇖)) = vv j aa + (int m) *⇩a (vv j x)"
apply (frule Ostrowski_elem_nonzero[of "n" "vv" "x"],
assumption+,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (frule_tac m = j in vals_nonequiv_valuation[of "Suc n" "vv"], assumption)
apply (subst val_t2p[of "vv j"], assumption+,
rule Ring.npClose, assumption+,
cut_tac field_is_idom,
frule_tac v1 = "vv j" and x1 = x and n1 = m in
val_exp_ring[THEN sym], assumption+, simp)
done
lemma (in Corps) Approximation1_5Tr5:"⟦vals_nonequiv K (Suc n) vv;
a ∈ carrier K; a ≠ 𝟬; x ∈ carrier K;
Ostrowski_elem K (Suc n) vv x; j ∈ nset (Suc 0) (Suc n)⟧ ⟹
∃l. ∀m. l < m ⟶ 0 < (vv j (a ⋅⇩r (x^⇗K m⇖)))"
apply (frule Ostrowski_elem_nonzero[of "n" "vv" "x"], assumption+,
subgoal_tac "∀n. vv j (a ⋅⇩r (x^⇗K n⇖)) = vv j a + (int n) *⇩a (vv j x)",
simp,
thin_tac "∀n. vv j (a ⋅⇩r x^⇗K n⇖) = vv j a + int n *⇩a vv j x")
prefer 2
apply (rule allI, rule Approximation1_5Tr4[of _ vv a x j],
assumption+, simp add:nset_def)
apply (frule_tac m = j in vals_nonequiv_valuation[of "Suc n" "vv"],
simp add:nset_def,
frule val_nonzero_z[of "vv j" "a"], assumption+, erule exE,
simp add:Ostrowski_elem_def,
frule conjunct2, fold Ostrowski_elem_def,
drule_tac x = j in bspec, assumption)
apply (frule Ostrowski_elem_nonzero[of "n" "vv" "x"], assumption+,
frule val_nonzero_z[of "vv j" "x"], assumption+, erule exE, simp,
frule_tac a = za and x = z in zmult_pos_bignumTr,
simp add:asprod_amult a_z_z a_zpz)
done
lemma (in Corps) Approximation1_5Tr6:"⟦vals_nonequiv K (Suc n) vv;
a ∈ carrier K; a ≠ 𝟬; x ∈ carrier K;
Ostrowski_elem K (Suc n) vv x; j ∈ nset (Suc 0) (Suc n)⟧ ⟹
∃l. ∀m. l < m ⟶ vv j ((1⇩r ± -⇩a x)^⇗K m⇖ ± a ⋅⇩r (x^⇗K m⇖)) = 0"
apply (frule vals_nonequiv_valuation[of "Suc n" "vv" "j"],
simp add:nset_def,
frule Approximation1_5Tr5[of "n" "vv" "a" "x" "j"],
assumption+, erule exE,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
subgoal_tac "∀m. l < m ⟶ vv j ((1⇩r ± -⇩a x)^⇗K m⇖ ± a ⋅⇩r (x^⇗K m⇖)) =
vv j ((1⇩r ± -⇩a x)^⇗K m⇖)")
apply (simp add:Approximation1_5Tr3, blast)
apply (rule allI, rule impI,
drule_tac a = m in forall_spec, assumption,
frule_tac x = "(1⇩r ± -⇩a x)^⇗K m⇖" and y = "a ⋅⇩r (x^⇗K m⇖)" in
value_less_eq[of "vv j"],
rule Ring.npClose, assumption+,
rule aGroup.ag_pOp_closed, assumption+, simp add:Ring.ring_one,
simp add:aGroup.ag_mOp_closed)
apply (rule Ring.ring_tOp_closed, assumption+,
rule Ring.npClose, assumption+,
simp add:Approximation1_5Tr3,
frule sym, assumption)
done
lemma (in Corps) Approximation1_5Tr7:"⟦a ∈ carrier K; vv 0 a = 1;
x ∈ carrier K⟧ ⟹
vals_nonequiv K (Suc n) vv ∧ Ostrowski_elem K (Suc n) vv x ⟶
(∃l. ∀m. l < m ⟶ (∀j∈nset (Suc 0) (Suc n).
(vv j ((1⇩r ± -⇩a x)^⇗K m⇖ ± a ⋅⇩r (x^⇗K m⇖)) = 0)))"
apply (induct_tac n,
rule impI, erule conjE, simp add:nset_m_m[of "Suc 0"],
frule vals_nonequiv_valuation[of "Suc 0" "vv" "Suc 0"], simp,
frule Approximation1_5Tr6[of "0" "vv" "a" "x" "Suc 0"], assumption+)
apply (frule vals_nonequiv_valuation[of "Suc 0" "vv" "0"], simp,
frule val_1_nonzero[of "vv 0" "a"], assumption+, simp add:nset_def,
assumption)
apply (rule impI, erule conjE,
frule_tac n = n in restrict_vals_nonequiv[of _ "vv"],
frule_tac n = n in restrict_Ostrowski_elem[of "x" _ "vv"],
assumption, simp,
erule exE,
frule_tac n = "Suc n" and j = "Suc (Suc n)" in Approximation1_5Tr6
[of _ "vv" "a" "x"], assumption+,
frule_tac n = "Suc (Suc n)" in vals_nonequiv_valuation[of _ "vv"
"0"],simp,
rule val_1_nonzero[of "vv 0" "a"], assumption+,
simp add:nset_def)
apply (erule exE,
subgoal_tac "∀m. (max l la) < m ⟶ (∀j∈nset (Suc 0) (Suc (Suc n)).
vv j ((1⇩r ± -⇩a x)^⇗K m⇖ ± a ⋅⇩r (x^⇗K m⇖)) = 0)",
blast,
simp add:nset_Suc)
done
lemma (in Corps) Approximation1_5P:"⟦vals_nonequiv K (Suc n) vv;
n_val K (vv 0) = vv 0⟧ ⟹
∃x∈carrier K. ((vv 0 x = 1) ∧ (∀j∈nset (Suc 0) (Suc n). (vv j x) = 0))"
apply (frule vals_nonequiv_valuation[of "Suc n" "vv" "0"], simp) apply (
frule n_val_surj[of "vv 0"], erule bexE) apply (
rename_tac aa) apply (
cut_tac n = n in Ostrowski) apply (
drule_tac a = vv in forall_spec[of "vals_nonequiv K (Suc n)"], simp)
apply (
erule bexE,
frule_tac a = aa and x = x in Approximation1_5Tr1[of "n" "vv"],
assumption+,
simp, assumption+)
apply (frule_tac a = aa and x = x in Approximation1_5Tr7[of _ "vv" _ "n"],
simp, assumption,
simp, erule exE,
cut_tac b = "Suc l" in max.cobounded1[of "2"],
cut_tac b = "Suc l" in max.cobounded2[of _ "2"],
cut_tac n = l in lessI,
frule_tac x = l and y = "Suc l" and z = "max 2 (Suc l)" in
less_le_trans, assumption+,
thin_tac "Suc l ≤ max 2 (Suc l)", thin_tac "l < Suc l",
drule_tac a = "max 2 (Suc l)" in forall_spec, simp,
drule_tac a = "max 2 (Suc l)" in forall_spec, assumption)
apply (subgoal_tac "(1⇩r ± -⇩a x)^⇗K (max 2 (Suc l))⇖ ± aa ⋅⇩r (x^⇗K (max 2 (Suc l))⇖) ∈
carrier K",
blast,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
rule aGroup.ag_pOp_closed, assumption+, rule Ring.npClose, assumption+,
rule aGroup.ag_pOp_closed, assumption+, simp add:Ring.ring_one,
simp add:aGroup.ag_mOp_closed, rule Ring.ring_tOp_closed, assumption+,
rule Ring.npClose, assumption+)
done
lemma K_gamma_hom:"k ≤ n ⟹ ∀j ≤ n. (λl. γ⇘k l⇙) j ∈ Zset"
apply (simp add:Zset_def)
done
lemma transpos_eq:"(τ⇘0 0⇙) k = k"
by (simp add:transpos_def)
lemma (in Corps) transpos_vals_nonequiv:"⟦vals_nonequiv K (Suc n) vv;
j ≤ (Suc n)⟧ ⟹ vals_nonequiv K (Suc n) (vv ∘ (τ⇘0 j⇙))"
apply (simp add:vals_nonequiv_def)
apply (frule conjunct1, fold vals_nonequiv_def)
apply (simp add:valuations_def, rule conjI)
apply (rule allI, rule impI)
apply (case_tac "ja = 0", simp,
case_tac "j = 0", simp add:transpos_eq)
apply (subst transpos_ij_1[of "0" "Suc n" "j"], simp, assumption+,
rule not_sym, assumption, simp)
apply (case_tac "ja = j", simp)
apply (subst transpos_ij_2[of "0" "Suc n" "j"], simp, assumption, simp,
simp add:vals_nonequiv_valuation)
apply (case_tac "j = 0", simp add:transpos_eq)
apply (cut_tac x = ja in transpos_id_1[of 0 "Suc n" j], simp, assumption+,
rule not_sym, assumption+)
apply (simp add:vals_nonequiv_valuation,
(rule allI, rule impI)+, rule impI)
apply (case_tac "j = 0", simp add:transpos_eq,
simp add:vals_nonequiv_def,
cut_tac transpos_inj[of "0" "Suc n" "j"], simp)
apply (frule_tac x = ja and y = l in injective[of "transpos 0 j"
"{j. j ≤ (Suc n)}"], simp, simp, assumption+)
apply (cut_tac l = ja in transpos_mem[of "0" "Suc n" "j"], simp, assumption+,
simp, assumption,
cut_tac l = l in transpos_mem[of "0" "Suc n" "j"], simp, assumption+,
simp, assumption)
apply (simp add:vals_nonequiv_def,
simp, assumption, rule not_sym, assumption)
done
definition
Ostrowski_base :: "[_, nat ⇒ 'b ⇒ ant, nat] ⇒ (nat ⇒ 'b)"
("(Ω⇘_ _ _⇙)" [90,90,91]90) where
"Ostrowski_base K vv n = (λj∈{h. h ≤ n}. (SOME x. x∈carrier K ∧
(Ostrowski_elem K n (vv ∘ (τ⇘0 j⇙)) x)))"
definition
App_base :: "[_, nat ⇒ 'b ⇒ ant, nat] ⇒ (nat ⇒ 'b)" where
"App_base K vv n = (λj∈{h. h ≤ n}. (SOME x. x∈carrier K ∧ (((vv ∘ τ⇘0 j⇙) 0 x
= 1) ∧ (∀k∈nset (Suc 0) n. ((vv ∘ τ⇘0 j⇙) k x) = 0))))"
lemma (in Corps) Ostrowski_base_hom:"vals_nonequiv K (Suc n) vv ⟹
Ostrowski_base K vv (Suc n) ∈ {h. h ≤ (Suc n)} → carrier K"
apply (rule Pi_I, rename_tac l,
simp add:Ostrowski_base_def,
frule_tac j = l in transpos_vals_nonequiv[of n vv], simp,
cut_tac Ostrowski[of n])
apply (drule_tac a = "vv ∘ τ⇘0 l⇙" in forall_spec, simp,
rule someI2_ex, blast, simp)
done
lemma (in Corps) Ostrowski_base_mem:"vals_nonequiv K (Suc n) vv ⟹
∀j ≤ (Suc n). Ostrowski_base K vv (Suc n) j ∈ carrier K"
by (rule allI, rule impI,
frule Ostrowski_base_hom[of "n" "vv"],
simp add:funcset_mem del:Pi_I')
lemma (in Corps) Ostrowski_base_mem_1:"⟦vals_nonequiv K (Suc n) vv;
j ≤ (Suc n)⟧ ⟹ Ostrowski_base K vv (Suc n) j ∈ carrier K"
by (simp add:Ostrowski_base_mem)
lemma (in Corps) Ostrowski_base_nonzero:"⟦vals_nonequiv K (Suc n) vv;
j ≤ Suc n⟧ ⟹ (Ω⇘K vv (Suc n)⇙) j ≠ 𝟬"
apply (simp add:Ostrowski_base_def,
frule_tac j = j in transpos_vals_nonequiv[of "n" "vv"],
assumption+,
cut_tac Ostrowski[of "n"],
drule_tac a = "vv ∘ τ⇘0 j⇙" in forall_spec, assumption,
rule someI2_ex, blast)
apply (thin_tac "∃x∈carrier K. Ostrowski_elem K (Suc n) (vv ∘ τ⇘0 j⇙) x",
erule conjE)
apply (rule_tac vv = "vv ∘ τ⇘0 j⇙" and x = x in Ostrowski_elem_nonzero[of "n"],
assumption+)
done
lemma (in Corps) Ostrowski_base_pos:"⟦vals_nonequiv K (Suc n) vv;
j ≤ Suc n; ja ≤ Suc n; ja ≠ j⟧ ⟹ 0 < ((vv j) ((Ω⇘K vv (Suc n)⇙) ja))"
apply (simp add:Ostrowski_base_def,
frule_tac j = ja in transpos_vals_nonequiv[of "n" "vv"],
assumption+,
cut_tac Ostrowski[of "n"],
drule_tac a = "vv ∘ τ⇘0 ja⇙" in forall_spec, assumption+)
apply (rule someI2_ex, blast,
thin_tac "∃x∈carrier K. Ostrowski_elem K (Suc n) (vv ∘ τ⇘0 ja⇙) x",
simp add:Ostrowski_elem_def, (erule conjE)+)
apply (case_tac "ja = 0", simp, cut_tac transpos_eq[of "j"],
simp add:nset_def, frule Suc_leI[of "0" "j"],
frule_tac a = j in forall_spec, simp, simp)
apply (case_tac "j = 0", simp,
frule_tac x = ja in bspec, simp add:nset_def,
cut_tac transpos_ij_2[of "0" "Suc n" "ja"], simp, simp+)
apply (frule_tac x = j in bspec, simp add:nset_def,
cut_tac transpos_id[of "0" "Suc n" "ja" "j"], simp+)
done
lemma (in Corps) App_base_hom:"⟦vals_nonequiv K (Suc n) vv;
∀j ≤ (Suc n). n_val K (vv j) = vv j⟧ ⟹
∀j ≤ (Suc n). App_base K vv (Suc n) j ∈ carrier K"
apply (rule allI, rule impI,
rename_tac k,
subst App_base_def)
apply (case_tac "k = 0", simp, simp add:transpos_eq,
frule Approximation1_5P[of "n" "vv"], simp,
rule someI2_ex, blast, simp)
apply (frule_tac j = k in transpos_vals_nonequiv[of "n" "vv"],
simp add:nset_def,
frule_tac vv = "vv ∘ τ⇘0 k⇙" in Approximation1_5P[of "n"])
apply (simp add:cmp_def, subst transpos_ij_1[of "0" "Suc n"], simp+,
subst transpos_ij_1[of 0 "Suc n" k], simp+)
apply (rule someI2_ex, blast, simp)
done
lemma (in Corps) Approzimation1_5P2:"⟦vals_nonequiv K (Suc n) vv;
∀l∈{h. h ≤ Suc n}. n_val K (vv l) = vv l; i ≤ Suc n; j ≤ Suc n⟧
⟹ vv i (App_base K vv (Suc n) j) = δ⇘i j⇙ "
apply (simp add:App_base_def)
apply (case_tac "j = 0", simp add:transpos_eq,
rule someI2_ex,
frule Approximation1_5P[of "n" "vv"], simp , blast,
simp add:Kronecker_delta_def, rule impI, (erule conjE)+,
frule_tac x = i in bspec, simp add:nset_def, assumption)
apply (frule_tac j = j in transpos_vals_nonequiv[of "n" "vv"], simp,
frule Approximation1_5P[of "n" "vv ∘ τ⇘0 j⇙"],
simp add:cmp_def, simp add:transpos_ij_1[of 0 "Suc n" j])
apply (simp add:cmp_def,
case_tac "i = 0", simp add:transpos_eq,
simp add:transpos_ij_1, simp add:Kronecker_delta_def,
rule someI2_ex, blast,
thin_tac "∃x∈carrier K.
vv j x = 1 ∧ (∀ja∈nset (Suc 0) (Suc n). vv ((τ⇘0 j⇙) ja) x = 0)",
(erule conjE)+,
drule_tac x = j in bspec, simp add:nset_def,
simp add:transpos_ij_2)
apply (simp add:Kronecker_delta_def,
case_tac "i = j", simp add:transpos_ij_1, rule someI2_ex, blast, simp)
apply (simp, rule someI2_ex, blast,
thin_tac "∃x∈carrier K. vv ((τ⇘0 j⇙) 0) x = 1 ∧
(∀ja∈nset (Suc 0) (Suc n). vv ((τ⇘0 j⇙) ja) x = 0)",
(erule conjE)+,
drule_tac x = i in bspec, simp add:nset_def,
cut_tac transpos_id[of 0 "Suc n" j i], simp+)
done
lemma (in Corps) Approximation1_5:"⟦vals_nonequiv K (Suc n) vv;
∀j ≤ (Suc n). n_val K (vv j) = vv j⟧ ⟹
∃x. (∀j ≤ (Suc n). x j ∈ carrier K) ∧ (∀i ≤ (Suc n). ∀j ≤ (Suc n).
((vv i) (x j) = δ⇘i j⇙))"
apply (frule App_base_hom[of n vv], rule allI, simp)
apply (subgoal_tac "(∀i ≤ (Suc n). ∀j ≤ (Suc n).
(vv i) ((App_base K vv (Suc n)) j) = (δ⇘i j⇙))",
blast)
apply (rule allI, rule impI)+
apply (rule Approzimation1_5P2, assumption+, simp+)
done
lemma (in Corps) Ostrowski_baseTr0:"⟦vals_nonequiv K (Suc n) vv; l ≤ (Suc n) ⟧
⟹ 0 < ((vv l) (1⇩r ± -⇩a (Ostrowski_base K vv (Suc n) l))) ∧
(∀m∈{h. h ≤ (Suc n)} - {l}. 0 < ((vv m) (Ostrowski_base K vv (Suc n) l)))"
apply (simp add:Ostrowski_base_def,
frule_tac j = l in transpos_vals_nonequiv[of "n" "vv"], assumption,
cut_tac Ostrowski[of "n"],
drule_tac a = "vv ∘ τ⇘0 l⇙" in forall_spec, assumption)
apply (erule bexE,
unfold Ostrowski_elem_def, frule conjunct1,
fold Ostrowski_elem_def,
rule conjI, simp add:Ostrowski_elem_def)
apply (case_tac "l = 0", simp, simp add:transpos_eq,
rule someI2_ex, blast, simp,
simp add:transpos_ij_1,
rule someI2_ex, blast, simp)
apply (simp add:Ostrowski_elem_def,
case_tac "l = 0", simp, simp add:transpos_eq,
rule someI2_ex, blast,
thin_tac "0 < vv 0 (1⇩r ± -⇩a x) ∧
(∀j∈nset (Suc 0) (Suc n). 0 < vv j x)",
rule ballI, simp add:nset_def)
apply (rule ballI, erule conjE,
rule someI2_ex, blast,
thin_tac "∀j∈nset (Suc 0) (Suc n). 0 < vv ((τ⇘0 l⇙) j) x",
(erule conjE)+)
apply (case_tac "m = 0", simp,
drule_tac x = l in bspec, simp add:nset_def,
simp add:transpos_ij_2,
drule_tac x = m in bspec, simp add:nset_def,
simp add:transpos_id)
done
lemma (in Corps) Ostrowski_baseTr1:"⟦vals_nonequiv K (Suc n) vv; l ≤ (Suc n)⟧
⟹ 0 < ((vv l) (1⇩r ± -⇩a (Ostrowski_base K vv (Suc n) l)))"
by (simp add:Ostrowski_baseTr0)
lemma (in Corps) Ostrowski_baseTr2:"⟦vals_nonequiv K (Suc n) vv;
l ≤ (Suc n); m ≤ (Suc n); l ≠ m⟧ ⟹
0 < ((vv m) (Ostrowski_base K vv (Suc n) l))"
apply (frule Ostrowski_baseTr0[of "n" "vv" "l"], assumption+)
apply simp
done
lemma Nset_have_two:"j ∈{h. h ≤ (Suc n)} ⟹ ∃m ∈ {h. h ≤ (Suc n)}. j ≠ m"
apply (rule contrapos_pp, simp+,
case_tac "j = Suc n", simp,
drule_tac a = 0 in forall_spec, simp, arith)
apply (drule_tac a = "Suc n" in forall_spec, simp, simp)
done
lemma (in Corps) Ostrowski_base_npow_not_one:"⟦0 < N; j ≤ Suc n;
vals_nonequiv K (Suc n) vv⟧ ⟹
1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) j^⇗K N⇖) ≠ 𝟬"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
rule contrapos_pp, simp+,
frule Ostrowski_base_mem_1[of "n" "vv" "j"], assumption,
frule Ring.npClose[of "K" "(Ω⇘K vv (Suc n)⇙) j" "N"], assumption+,
frule Ring.ring_one[of "K"],
frule aGroup.ag_mOp_closed[of K "(Ω⇘K vv (Suc n)⇙) j^⇗K N⇖"], assumption+,
frule aGroup.ag_pOp_closed[of "K" "1⇩r" "-⇩a ((Ω⇘K vv (Suc n)⇙) j^⇗K N⇖)"],
assumption+)
apply (frule aGroup.ag_pOp_add_r[of "K" "1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) j^⇗K N⇖)" "𝟬"
"(Ω⇘K vv (Suc n)⇙) j^⇗K N⇖"], assumption+,
simp add:aGroup.ag_inc_zero, assumption+,
thin_tac "1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) j^⇗K N⇖) = 𝟬")
apply (simp add:aGroup.ag_pOp_assoc[of "K" "1⇩r" "-⇩a ((Ω⇘K vv (Suc n)⇙) j^⇗K N⇖)"])
apply (simp add:aGroup.ag_l_inv1, simp add:aGroup.ag_r_zero aGroup.ag_l_zero)
apply (subgoal_tac "∀m ≤ (Suc n). (j ≠ m ⟶
0 < (vv m ((Ω⇘K vv (Suc n)⇙) j)))")
apply (cut_tac Nset_have_two[of "j" "n"],
erule bexE, drule_tac a = m in forall_spec, simp,
thin_tac "(Ω⇘K vv (Suc n)⇙) j^⇗K N⇖ ± -⇩a ((Ω⇘K vv (Suc n)⇙) j^⇗K N⇖) ∈ carrier K",
frule_tac f = "vv m" in eq_elems_eq_val[of "1⇩r" "(Ω⇘K vv (Suc n)⇙) j^⇗K N⇖"],
thin_tac "1⇩r = (Ω⇘K vv (Suc n)⇙) j^⇗K N⇖", simp)
apply (frule_tac m = m in vals_nonequiv_valuation[of "Suc n" "vv"],
assumption+,
frule_tac v1 = "vv m" and n1 = N in val_exp_ring[THEN sym,
of _ "(Ω⇘K vv (Suc n)⇙) j"], assumption+,
simp add:Ostrowski_base_nonzero, simp, simp add:value_of_one)
apply (subgoal_tac "int N ≠ 0",
frule_tac x = "vv m ((Ω⇘K vv (Suc n)⇙) j)" in asprod_0[of "int N"],
assumption, simp add:less_ant_def, simp, simp,
rule allI, rule impI, rule impI,
rule Ostrowski_baseTr2, assumption+)
done
abbreviation
CHOOSE :: "[nat, nat] ⇒ nat" ("(⇘_⇙C⇘_⇙)" [80, 81]80) where
"⇘n⇙C⇘i⇙ == n choose i"
lemma (in Ring) expansion_of_sum1:"x ∈ carrier R ⟹
(1⇩r ± x)^⇗R n⇖ = nsum R (λi. ⇘n⇙C⇘i⇙ ×⇘R⇙ x^⇗R i⇖) n"
apply (cut_tac ring_one, frule npeSum2[of "1⇩r" "x" "n"], assumption+,
simp add:npOne, subgoal_tac "∀(j::nat). (x^⇗R j⇖) ∈ carrier R")
apply (simp add:ring_l_one, rule allI, simp add:npClose)
done
lemma (in Ring) tail_of_expansion:"x ∈ carrier R ⟹ (1⇩r ± x)^⇗R (Suc n)⇖ =
(nsum R (λ i. (⇘(Suc n)⇙C⇘(Suc i)⇙ ×⇘R⇙ x^⇗R (Suc i)⇖)) n) ± 1⇩r"
apply (cut_tac ring_is_ag)
apply (frule expansion_of_sum1[of "x" "Suc n"],
simp del:nsum_suc binomial_Suc_Suc npow_suc,
thin_tac "(1⇩r ± x)^⇗R (Suc n)⇖ = Σ⇩e R (λi. ⇘(Suc n)⇙C⇘i⇙ ×⇘R⇙ x^⇗R i⇖) (Suc n)")
apply (subst aGroup.nsumTail[of R n "λi. ⇘(Suc n)⇙C⇘i⇙ ×⇘R⇙ x^⇗R i⇖"], assumption,
rule allI, rule impI, rule nsClose, rule npClose, assumption)
apply (cut_tac ring_one,
simp del:nsum_suc binomial_Suc_Suc npow_suc add:aGroup.ag_l_zero)
done
lemma (in Ring) tail_of_expansion1:"x ∈ carrier R ⟹
(1⇩r ± x)^⇗R (Suc n)⇖ = x ⋅⇩r (nsum R (λ i. (⇘(Suc n)⇙C⇘(Suc i)⇙ ×⇘R⇙ x^⇗R i⇖)) n) ± 1⇩r"
apply (frule tail_of_expansion[of "x" "n"],
simp del:nsum_suc binomial_Suc_Suc npow_suc,
subgoal_tac "∀i. ⇘Suc n⇙C⇘Suc i⇙ ×⇘R⇙ x^⇗R i⇖ ∈ carrier R",
cut_tac ring_one, cut_tac ring_is_ag)
prefer 2 apply(simp add: nsClose npClose)
apply (rule aGroup.ag_pOp_add_r[of "R" _ _ "1⇩r"], assumption+,
rule aGroup.nsum_mem, assumption+, rule allI, rule impI,
rule nsClose, rule npClose, assumption)
apply (rule ring_tOp_closed, assumption+,
rule aGroup.nsum_mem, assumption+, blast, simp add:ring_one)
apply (subst nsumMulEleL[of "λi. ⇘Suc n⇙C⇘Suc i⇙ ×⇘R⇙ x^⇗R i⇖" "x"], assumption+)
apply (rule aGroup.nsum_eq, assumption, rule allI, rule impI, rule nsClose,
rule npClose, assumption, rule allI, rule impI,
rule ring_tOp_closed, assumption+, rule nsClose, rule npClose,
assumption)
apply (rule allI, rule impI)
apply (subst nsMulDistrL, assumption, simp add:npClose,
frule_tac n = j in npClose[of x], simp add:ring_tOp_commute[of x])
done
lemma (in Corps) nsum_in_VrTr:"valuation K v ⟹
(∀j ≤ n. f j ∈ carrier K) ∧ (∀j ≤ n.
0 ≤ (v (f j))) ⟶ (nsum K f n) ∈ carrier (Vr K v)"
apply (induct_tac n)
apply (rule impI, erule conjE, simp add:val_pos_mem_Vr)
apply (rule impI, erule conjE)
apply (frule Vr_ring[of v], frule Ring.ring_is_ag[of "Vr K v"],
frule_tac x = "f (Suc n)" and y = "nsum K f n" in
aGroup.ag_pOp_closed[of "Vr K v"],
subst val_pos_mem_Vr[THEN sym, of "v"], assumption+,
simp, simp, simp)
apply (simp, subst Vr_pOp_f_pOp[of "v", THEN sym], assumption+,
subst val_pos_mem_Vr[THEN sym, of v], assumption+,
simp+)
apply (subst aGroup.ag_pOp_commute, assumption+, simp add:val_pos_mem_Vr,
assumption)
done
lemma (in Corps) nsum_in_Vr:"⟦valuation K v; ∀j ≤ n. f j ∈ carrier K;
∀j ≤ n. 0 ≤ (v (f j))⟧ ⟹ (nsum K f n) ∈ carrier (Vr K v)"
apply (simp add:nsum_in_VrTr)
done
lemma (in Corps) nsum_mem_in_Vr:"⟦valuation K v;
∀j ≤ n. (f j) ∈ carrier K; ∀j ≤ n. 0 ≤ (v (f j))⟧ ⟹
(nsum K f n) ∈ carrier (Vr K v)"
by (rule nsum_in_Vr)
lemma (in Corps) val_nscal_ge_selfTr:"⟦valuation K v; x ∈ carrier K; 0 ≤ v x⟧
⟹ v x ≤ v (n ×⇘K⇙ x)"
apply (cut_tac field_is_ring, induct_tac n, simp)
apply (simp add:value_of_zero,
simp,
frule_tac y = "n ×⇘K⇙ x" in amin_le_plus[of "v" "x"], assumption+,
rule Ring.nsClose, assumption+)
apply (simp add:amin_def,
frule Ring.ring_is_ag[of K],
frule_tac n = n in Ring.nsClose[of K x], assumption+,
simp add:aGroup.ag_pOp_commute)
done
lemma (in Corps) ApproximationTr:"⟦valuation K v; x ∈ carrier K; 0 ≤ (v x)⟧ ⟹
v x ≤ (v (1⇩r ± -⇩a ((1⇩r ± x)^⇗K (Suc n)⇖)))"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
case_tac "x = 𝟬⇘K⇙",
simp, frule Ring.ring_one[of "K"], simp add:aGroup.ag_r_zero,
simp add:Ring.npOne, simp add:Ring.ring_l_one,simp add:aGroup.ag_r_inv1,
subst Ring.tail_of_expansion1[of "K" "x"], assumption+,
frule Ring.ring_one[of "K"])
apply (subgoal_tac "(nsum K (λi. ⇘Suc n⇙C⇘Suc i⇙ ×⇘K⇙ x^⇗K i⇖) n)∈carrier (Vr K v)",
frule Vr_mem_f_mem[of "v" "(nsum K (λi. ⇘Suc n⇙C⇘Suc i⇙ ×⇘K⇙ x^⇗K i⇖) n)"],
assumption+,
frule_tac x = x and y = "nsum K (λi. ⇘Suc n⇙C⇘Suc i⇙ ×⇘K⇙ x^⇗K i⇖) n" in
Ring.ring_tOp_closed[of "K"], assumption+,
subst aGroup.ag_pOp_commute[of "K" _ "1⇩r"], assumption+,
subst aGroup.ag_p_inv[of "K" "1⇩r"], assumption+,
subst aGroup.ag_pOp_assoc[THEN sym], assumption+,
simp add:aGroup.ag_mOp_closed, rule aGroup.ag_mOp_closed, assumption+,
simp del:binomial_Suc_Suc add:aGroup.ag_r_inv1, subst aGroup.ag_l_zero,
assumption+,
rule aGroup.ag_mOp_closed, assumption+, simp add:val_minus_eq)
apply (subst val_t2p[of v], assumption+) apply (
simp add:val_pos_mem_Vr[THEN sym, of v
"nsum K (λi.(⇘n⇙C⇘i⇙ + ⇘n⇙C⇘Suc i⇙) ×⇘K⇙ x^⇗K i⇖) n"],
frule aadd_le_mono[of "0" "v (nsum K (λi.(⇘n⇙C⇘i⇙ + ⇘n⇙C⇘Suc i⇙) ×⇘K⇙ x^⇗K i⇖) n)"
"v x"], simp add:aadd_0_l, simp add:aadd_commute[of "v x"])
apply (rule nsum_mem_in_Vr[of v n "λi.⇘Suc n⇙C⇘Suc i⇙ ×⇘K⇙ x^⇗K i⇖"], assumption,
rule allI, rule impI) apply (rule Ring.nsClose, assumption+) apply (simp add:Ring.npClose)
apply (rule allI, rule impI)
apply (cut_tac i = 0 and j = "v (x^⇗K j⇖)" and k = "v (⇘Suc n⇙C⇘Suc j⇙ ×⇘K⇙ x^⇗K j⇖)"
in ale_trans)
apply (case_tac "j = 0", simp add:value_of_one)
apply (simp add: val_exp_ring[THEN sym],
frule val_nonzero_z[of v x], assumption+,
erule exE,
cut_tac m1 = 0 and n1 = j in of_nat_less_iff[THEN sym],
frule_tac a = "0 < j" and b = "int 0 < int j" in a_b_exchange,
assumption, thin_tac "0 < j", thin_tac "(0 < j) = (int 0 < int j)")
apply (simp del: of_nat_0_less_iff)
apply (frule_tac w1 = "int j" and x1 = 0 and y1 = "ant z" in
asprod_pos_mono[THEN sym],
simp only:asprod_n_0)
apply(rule_tac x = "x^⇗K j⇖" and n = "⇘Suc n⇙C⇘Suc j⇙" in
val_nscal_ge_selfTr[of v], assumption+,
simp add:Ring.npClose, simp add:val_exp_ring[THEN sym],
frule val_nonzero_z[of "v" "x"], assumption+, erule exE, simp)
apply (case_tac "j = 0", simp)
apply (subst asprod_amult, simp, simp add:a_z_z)
apply(
simp only:ant_0[THEN sym], simp only:ale_zle,
cut_tac m1 = 0 and n1 = j in of_nat_less_iff[THEN sym])
apply ( frule_tac a = "0 < j" and b = "int 0 < int j" in a_b_exchange,
assumption+, thin_tac "0 < j", thin_tac "(0 < j) = (int 0 < int j)",
frule_tac z = "int 0" and z' = "int j" in zless_imp_zle,
frule_tac i = "int 0" and j = "int j" and k = z in int_mult_le,
assumption+, simp add:mult.commute )
apply assumption
done
lemma (in Corps) ApproximationTr0:"aa ∈ carrier K ⟹
(1⇩r ± -⇩a (aa^⇗K N⇖))^⇗K N⇖ ∈ carrier K"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
rule Ring.npClose, assumption+,
rule aGroup.ag_pOp_closed, assumption+, simp add:Ring.ring_one,
rule aGroup.ag_mOp_closed, assumption+, rule Ring.npClose, assumption+)
done
lemma (in Corps) ApproximationTr1:"aa ∈ carrier K ⟹
1⇩r ± -⇩a ((1⇩r ± -⇩a (aa^⇗K N⇖))^⇗K N⇖) ∈ carrier K"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule ApproximationTr0[of aa N],
frule Ring.ring_one[of "K"], rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+)
done
lemma (in Corps) ApproximationTr2:"⟦valuation K v; aa ∈ carrier K; aa ≠ 𝟬;
0 ≤ (v aa)⟧ ⟹ (int N) *⇩a(v aa) ≤ (v (1⇩r ± -⇩a ((1⇩r ± -⇩a (aa^⇗K N⇖))^⇗K N⇖)))"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
case_tac "N = 0",
frule val_nonzero_z[of v "aa"], assumption+, erule exE, simp)
apply(frule Ring.ring_one[of "K"], simp add:aGroup.ag_r_inv1,
simp add:value_of_zero)
apply (frule_tac n = N in Ring.npClose[of "K" "aa"], assumption+,
frule ApproximationTr[of v "-⇩a (aa^⇗K N⇖)" "N - Suc 0"],
rule aGroup.ag_mOp_closed, assumption+, simp add:val_minus_eq,
subst val_exp_ring[THEN sym, of v], assumption+,
simp add:asprod_pos_pos)
apply (simp add:val_minus_eq, simp add:val_exp_ring[THEN sym])
done
lemma (in Corps) eSum_tr:"
( ∀j ≤ n. (x j) ∈ carrier K) ∧
( ∀j ≤ n. (b j) ∈ carrier K) ∧ l ≤ n ∧
( ∀j∈({h. h ≤ n} -{l}). (g j = (x j) ⋅⇩r (1⇩r ± -⇩a (b j)))) ∧
g l = (x l) ⋅⇩r (-⇩a (b l))
⟶ (nsum K (λj ∈ {h. h ≤ n}. (x j) ⋅⇩r (1⇩r ± -⇩a (b j))) n) ± (-⇩a (x l)) =
nsum K g n"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (induct_tac n)
apply (simp, rule impI, (erule conjE)+,
simp, frule Ring.ring_one[of "K"], subst Ring.ring_distrib1,
assumption+,
simp add:aGroup.ag_mOp_closed, simp add:Ring.ring_r_one,
frule aGroup.ag_mOp_closed[of K "b 0"], assumption+,
frule Ring.ring_tOp_closed[of "K" "x 0" "-⇩a (b 0)"], assumption+,
subst aGroup.ag_pOp_commute[of "K" "x 0" _], assumption+,
subst aGroup.ag_pOp_assoc, assumption+,
frule aGroup.ag_mOp_closed[of "K"],
assumption+)
apply (simp add:aGroup.ag_r_inv1, subst aGroup.ag_r_zero, assumption+, simp)
apply (rule impI, (erule conjE)+)
apply (subgoal_tac "∀j ≤ (Suc n). ((x j) ⋅⇩r (1⇩r ± -⇩a (b j))) ∈ carrier K")
apply (case_tac "l = Suc n", simp)
apply (subgoal_tac "Σ⇩e K g n ∈ carrier K",
subgoal_tac "{h. h ≤ (Suc n)} - {Suc n} = {h. h ≤ n}", simp,
subgoal_tac "∀j. j ≤ n ⟶ j ≤ (Suc n)",
frule_tac f = "λu. if u ≤ Suc n then (x u) ⋅⇩r (1⇩r ± -⇩a (b u)) else
undefined" and n = n in aGroup.nsum_eq[of "K" _ _ "g"])
apply (rule allI, rule impI, simp,
rule allI, simp, rule allI, rule impI, simp, simp)
apply (cut_tac a = "x (Suc n) ⋅⇩r (1⇩r ± -⇩a (b (Suc n))) ± -⇩a (x (Suc n))" and
b = "x (Suc n) ⋅⇩r (-⇩a (b (Suc n)))" and
c = "Σ⇩e K g n" in aGroup.ag_pOp_add_l[of K], assumption)
apply (rule aGroup.ag_pOp_closed, assumption+,
rule Ring.ring_tOp_closed, assumption+, simp,
rule aGroup.ag_pOp_closed, assumption+, simp add:Ring.ring_one,
rule aGroup.ag_mOp_closed, assumption, simp,
rule aGroup.ag_mOp_closed, assumption, simp,
rule Ring.ring_tOp_closed, assumption+, simp,
rule aGroup.ag_mOp_closed, assumption+, simp, assumption)
apply (subst Ring.ring_distrib1, assumption+, simp, simp add:Ring.ring_one,
simp add:aGroup.ag_mOp_closed,
simp add:Ring.ring_r_one) apply (
frule_tac x = "x (Suc n)" and y = "x (Suc n) ⋅⇩r (-⇩a (b (Suc n)))" in
aGroup.ag_pOp_commute [of "K"], simp,
simp add:Ring.ring_tOp_closed aGroup.ag_mOp_closed,
simp) apply (
subst aGroup.ag_pOp_assoc[of "K"], assumption+,
rule Ring.ring_tOp_closed, assumption+, simp,
(simp add:aGroup.ag_mOp_closed)+,
subst aGroup.ag_r_inv1, assumption+, simp,
subst aGroup.ag_r_zero, assumption+,
simp add:Ring.ring_tOp_closed aGroup.ag_mOp_closed, simp,
rotate_tac -1, drule sym, simp) apply (
thin_tac "Σ⇩e K g n ± x (Suc n) ⋅⇩r (-⇩a (b (Suc n))) =
Σ⇩e K g n ± (x (Suc n) ⋅⇩r (1⇩r ± -⇩a (b (Suc n))) ± -⇩a (x (Suc n)))")
apply (subst aGroup.ag_pOp_assoc[THEN sym], assumption+,
rule Ring.ring_tOp_closed, assumption+, simp,
rule aGroup.ag_pOp_closed, assumption+, simp add:Ring.ring_one,
rule aGroup.ag_mOp_closed, assumption+, simp,
rule aGroup.ag_mOp_closed, assumption+, simp, simp,
simp, rule equalityI, rule subsetI, simp, rule subsetI, simp)
apply (rule aGroup.nsum_mem, assumption+,
rule allI, rule impI, simp)
defer
apply (rule allI, rule impI)
apply (case_tac "j = l", simp,
rule Ring.ring_tOp_closed, assumption, simp,
rule aGroup.ag_pOp_closed, assumption+, simp add:Ring.ring_one,
rule aGroup.ag_mOp_closed, assumption, simp, simp,
rule Ring.ring_tOp_closed, assumption, simp,
rule aGroup.ag_pOp_closed, assumption+, simp add:Ring.ring_one,
rule aGroup.ag_mOp_closed, assumption, simp, simp)
apply (subst aGroup.ag_pOp_assoc, assumption+,
rule aGroup.nsum_mem, assumption+,
rule allI, simp, rule Ring.ring_tOp_closed, assumption+, simp,
rule aGroup.ag_pOp_closed, assumption+, simp add:Ring.ring_one,
rule aGroup.ag_mOp_closed, assumption, simp,
rule aGroup.ag_mOp_closed, assumption, simp,
subst aGroup.ag_pOp_commute[of K _ "-⇩a (x l)"], assumption+,
rule Ring.ring_tOp_closed, assumption, simp,
rule aGroup.ag_pOp_closed, assumption+, simp add:Ring.ring_one)
apply (rule aGroup.ag_mOp_closed, assumption+, simp,
rule aGroup.ag_mOp_closed, assumption+, simp,
subst aGroup.ag_pOp_assoc[THEN sym], assumption+,
rule aGroup.nsum_mem, assumption+,
rule allI, rule impI, simp,
rule aGroup.ag_mOp_closed, assumption, simp,
rule Ring.ring_tOp_closed, assumption, simp,
rule aGroup.ag_pOp_closed, assumption+, simp add:Ring.ring_one,
rule aGroup.ag_mOp_closed, assumption, simp)
apply (subgoal_tac "Σ⇩e K (λa. if a ≤ (Suc n) then x a ⋅⇩r (1⇩r ± -⇩a (b a))
else undefined) n ± -⇩a (x l) =
Σ⇩e K (λa. if a ≤ n then x a ⋅⇩r (1⇩r ± -⇩a (b a)) else undefined) n ±
-⇩a (x l)", simp,
rule aGroup.ag_pOp_add_r[of K _ _ "-⇩a (x l)"], assumption+,
rule aGroup.nsum_mem, assumption+,
rule allI, rule impI, simp,
rule aGroup.nsum_mem, assumption+,
rule allI, rule impI, simp,
rule aGroup.ag_mOp_closed, assumption, simp,
rule aGroup.nsum_eq, assumption+,
rule allI, rule impI, simp, rule allI, rule impI)
apply simp
apply (rule allI, rule impI, simp)
done
lemma (in Corps) eSum_minus_x:"⟦∀j ≤ n. (x j) ∈ carrier K;
∀j ≤ n. (b j) ∈ carrier K; l ≤ n;
∀j∈({h. h ≤ n} -{l}). (g j = (x j) ⋅⇩r (1⇩r ± -⇩a (b j)));
g l = (x l) ⋅⇩r (-⇩a (b l)) ⟧ ⟹
(nsum K (λj∈{h. h ≤ n}. (x j) ⋅⇩r (1⇩r ± -⇩a (b j))) n) ± (-⇩a (x l)) =
nsum K g n"
by (cut_tac eSum_tr[of "n" "x" "b" "l" "g"], simp)
lemma (in Ring) one_m_x_times:"x ∈ carrier R ⟹
(1⇩r ± -⇩a x) ⋅⇩r (nsum R (λj. x^⇗R j⇖) n) = 1⇩r ± -⇩a (x^⇗R (Suc n)⇖)"
apply (cut_tac ring_one, cut_tac ring_is_ag,
frule aGroup.ag_mOp_closed[of "R" "x"], assumption+,
frule aGroup.ag_pOp_closed[of "R" "1⇩r" "-⇩a x"], assumption+)
apply (induct_tac n)
apply (simp add:ring_r_one ring_l_one)
apply (simp del:npow_suc,
frule_tac n = "Suc n" in npClose[of "x"],
subst ring_distrib1, assumption+)
apply (rule aGroup.nsum_mem, assumption, rule allI, rule impI,
simp add:npClose, rule npClose, assumption+,
simp del:npow_suc,
thin_tac "(1⇩r ± -⇩a x) ⋅⇩r Σ⇩e R (npow R x) n = 1⇩r ± -⇩a (x^⇗R (Suc n)⇖)")
apply (subst ring_distrib2, assumption+,
simp del:npow_suc add:ring_l_one,
subst aGroup.pOp_assocTr43[of R], assumption+,
rule_tac x = "x^⇗R (Suc n)⇖" in aGroup.ag_mOp_closed[of R], assumption+,
rule ring_tOp_closed, rule aGroup.ag_mOp_closed, assumption+)
apply (subst aGroup.ag_l_inv1, assumption+, simp del:npow_suc
add:aGroup.ag_r_zero,
frule_tac x = "-⇩a x" and y = "x^⇗R (Suc n)⇖" in ring_tOp_closed,
assumption+)
apply (rule aGroup.ag_pOp_add_l[of R _ _ "1⇩r"], assumption+,
rule aGroup.ag_mOp_closed, assumption+,
rule npClose, assumption+,
subst ring_inv1_1[THEN sym, of x], assumption,
rule npClose, assumption,
simp,
subst ring_tOp_commute[of x], assumption+, simp)
done
lemma (in Corps) x_pow_fSum_in_Vr:"⟦valuation K v; x ∈ carrier (Vr K v)⟧ ⟹
(nsum K (npow K x) n) ∈ carrier (Vr K v)"
apply (frule Vr_ring[of v])
apply (induct_tac n)
apply simp
apply (frule Ring.ring_one[of "Vr K v"])
apply (simp add:Vr_1_f_1)
apply (simp del:npow_suc)
apply (frule Ring.ring_is_ag[of "Vr K v"])
apply (subst Vr_pOp_f_pOp[THEN sym, of v], assumption+)
apply (subst Vr_exp_f_exp[THEN sym, of v], assumption+)
apply (rule Ring.npClose[of "Vr K v"], assumption+)
apply (rule aGroup.ag_pOp_closed[of "Vr K v"], assumption+)
apply (subst Vr_exp_f_exp[THEN sym, of v], assumption+)
apply (rule Ring.npClose[of "Vr K v"], assumption+)
done
lemma (in Corps) val_1mx_pos:"⟦valuation K v; x ∈ carrier K;
0 < (v (1⇩r ± -⇩a x))⟧ ⟹ v x = 0"
apply (cut_tac field_is_ring, frule Ring.ring_one[of "K"],
frule Ring.ring_is_ag[of "K"])
apply (frule aGroup.ag_mOp_closed[of "K" "x"], assumption+)
apply (frule aGroup.ag_pOp_closed[of "K" "1⇩r" "-⇩a x"], assumption+)
apply (frule aGroup.ag_mOp_closed[of "K" "1⇩r ± -⇩a x"], assumption+)
apply (cut_tac x = x and y = "1⇩r ± -⇩a (1⇩r ± -⇩a x)" and f = v in
eq_elems_eq_val)
apply (subst aGroup.ag_p_inv, assumption+,
subst aGroup.ag_pOp_assoc[THEN sym], assumption+,
rule aGroup.ag_mOp_closed, assumption+,
subst aGroup.ag_inv_inv, assumption+,
subst aGroup.ag_r_inv1, assumption+,
subst aGroup.ag_l_zero, assumption+,
(simp add:aGroup.ag_inv_inv)+,
frule value_less_eq[of v "1⇩r" "-⇩a (1⇩r ± -⇩a x)"],
assumption+)
apply (simp add:val_minus_eq value_of_one,
simp add:value_of_one)
done
lemma (in Corps) val_1mx_pow:"⟦valuation K v; x ∈ carrier K;
0 < (v (1⇩r ± -⇩a x))⟧ ⟹ 0 < (v (1⇩r ± -⇩a x^⇗K (Suc n)⇖))"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (subst Ring.one_m_x_times[THEN sym, of K x n], assumption+)
apply (frule Ring.ring_one[of "K"],
frule x_pow_fSum_in_Vr[of v x n],
subst val_pos_mem_Vr[THEN sym], assumption+,
frule val_1mx_pos[of "v" "x"], assumption+,
simp)
apply (subst val_t2p, assumption+,
rule aGroup.ag_pOp_closed, assumption+,
simp add:aGroup.ag_mOp_closed, simp add:Vr_mem_f_mem,
frule val_pos_mem_Vr[THEN sym, of v "nsum K (npow K x) n"],
simp add:Vr_mem_f_mem, simp)
apply(frule aadd_le_mono[of "0" "v (nsum K (npow K x) n)" "v (1⇩r ± -⇩a x)"],
simp add:aadd_0_l, simp add:aadd_commute)
done
lemma (in Corps) ApproximationTr3:"⟦vals_nonequiv K (Suc n) vv;
∀l ≤ (Suc n). x l ∈ carrier K; j ≤ (Suc n)⟧ ⟹
∃L.(∀N. L < N ⟶ (an m) ≤ (vv j ((Σ⇩e K (λk∈{h. h ≤ (Suc n)}.
(x k) ⋅⇩r (1⇩r ± -⇩a ((1⇩r ± -⇩a (((Ω⇘K vv (Suc n)⇙) k)^⇗K N⇖))^⇗K N⇖)))
(Suc n)) ± -⇩a (x j))))"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (frule_tac vals_nonequiv_valuation[of "Suc n" "vv" j], assumption+)
apply (subgoal_tac "∀N. Σ⇩e K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅⇩r (1⇩r ± -⇩a (1⇩r ±
-⇩a ((Ω⇘K vv (Suc n)⇙) j)^⇗K N⇖)^⇗K N⇖)) (Suc n) ± -⇩a (x j) =
Σ⇩e K (λl∈{h. h≤ (Suc n)}. (if l ≠ j then (x l) ⋅⇩r (1⇩r ± -⇩a (1⇩r ± -⇩a
((Ω⇘K vv (Suc n)⇙) l)^⇗K N⇖)^⇗K N⇖) else (x j) ⋅⇩r (1⇩r ± -⇩a (1⇩r ±
-⇩a ((Ω⇘K vv (Suc n)⇙) l)^⇗K N⇖)^⇗K N⇖ ± -⇩a 1⇩r))) (Suc n)")
apply (simp del:nsum_suc)
apply (thin_tac "∀N. Σ⇩e K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅⇩r (1⇩r ± -⇩a (1⇩r ±
-⇩a (Ω⇘K vv (Suc n)⇙) j^⇗K N⇖)^⇗K N⇖)) (Suc n) ± -⇩a (x j) = Σ⇩e K (λl∈{h. h ≤ (Suc n)}. if l ≠ j then (x l) ⋅⇩r (1⇩r ± -⇩a (1⇩r ± -⇩a (Ω⇘K vv (Suc n)⇙) l^⇗K N⇖)^⇗K N⇖) else (x j) ⋅⇩r (1⇩r ± -⇩a (1⇩r ± -⇩a (Ω⇘K vv (Suc n)⇙) l^⇗K N⇖)^⇗K N⇖ ± -⇩a 1⇩r)) (Suc n)")
prefer 2 apply (rule allI)
apply (rule eSum_minus_x, assumption+)
apply (rule allI, rule impI) apply (rule ApproximationTr0)
apply (simp add:Ostrowski_base_mem) apply assumption
apply (rule ballI, simp)
apply simp
apply (frule Ring.ring_one[of "K"])
apply (cut_tac aa = "(Ω⇘K vv (Suc n)⇙) j" and N = N in
ApproximationTr0)
apply (simp add:Ostrowski_base_mem)
apply (subst aGroup.ag_pOp_assoc, assumption+)
apply (rule aGroup.ag_mOp_closed, assumption+)+
apply (subst aGroup.ag_pOp_commute[of "K" _ "-⇩a 1⇩r"], assumption+)
apply (rule aGroup.ag_mOp_closed, assumption+)+
apply (subst aGroup.ag_pOp_assoc[THEN sym], assumption+)
apply (rule aGroup.ag_mOp_closed, assumption+)+
apply (simp add:aGroup.ag_r_inv1)
apply (subst aGroup.ag_l_zero, assumption+) apply (simp add:aGroup.ag_mOp_closed)
apply simp
apply (subgoal_tac "∃L. ∀N. L < N ⟶
(∀ja ≤ (Suc n). (an m) ≤ ((vv j ∘ (λl∈{h. h ≤ (Suc n)}. if l ≠ j then (x l) ⋅⇩r (1⇩r ± -⇩a (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) l)^⇗K N⇖)^⇗K N⇖) else (x j) ⋅⇩r (1⇩r ± -⇩a (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) l)^⇗K N⇖)^⇗K N⇖ ± -⇩a 1⇩r))) ja))")
apply (erule exE)
apply (rename_tac M)
apply (subgoal_tac "∀N. M < (N::nat) ⟶
(an m) ≤ (vv j (Σ⇩e K (λl∈{h. h ≤ (Suc n)}. (if l ≠ j then
(x l) ⋅⇩r (1⇩r ± -⇩a (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) l)^⇗K N⇖)^⇗K N⇖)
else (x j) ⋅⇩r (1⇩r ± -⇩a (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) l)^⇗K N⇖)^⇗K N⇖
± -⇩a 1⇩r))) (Suc n)))")
apply blast
apply (rule allI, rule impI)
apply (drule_tac a = N in forall_spec, assumption)
apply (rule value_ge_add[of "vv j" "Suc n" _ "an m"], assumption+)
apply (rule allI, rule impI)
apply (frule Ring.ring_one[of "K"])
apply (case_tac "ja = j", simp)
apply (rule Ring.ring_tOp_closed, assumption+, simp)
apply (rule aGroup.ag_pOp_closed, assumption+)+
apply (rule aGroup.ag_mOp_closed, assumption+)
apply (rule Ring.npClose, assumption)
apply (rule aGroup.ag_pOp_closed, assumption+)
apply (rule aGroup.ag_mOp_closed, assumption)
apply (rule Ring.npClose, assumption)
apply (simp add:Ostrowski_base_mem)
apply (rule aGroup.ag_mOp_closed, assumption+)
apply simp
apply (rule Ring.ring_tOp_closed, assumption+, simp)
apply (rule aGroup.ag_pOp_closed, assumption+)+
apply (rule aGroup.ag_mOp_closed, assumption+)
apply (rule Ring.npClose, assumption)
apply (rule aGroup.ag_pOp_closed, assumption+)
apply (rule aGroup.ag_mOp_closed, assumption)
apply (rule Ring.npClose, assumption)
apply (simp add:Ostrowski_base_mem)
apply assumption
apply (subgoal_tac "∀N. ∀ja ≤ (Suc n). (1⇩r ± -⇩a (1⇩r ± -⇩a
((Ω⇘K vv (Suc n)⇙) ja)^⇗K N⇖)^⇗K N⇖) ∈ carrier K")
apply (subgoal_tac "∀N. (1⇩r ± -⇩a (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) j)^⇗K N⇖)^⇗K N⇖
± -⇩a 1⇩r) ∈ carrier K")
apply (simp add:val_t2p)
apply (cut_tac multi_inequalityTr0[of "Suc n" "(vv j) ∘ x" "m"])
apply (subgoal_tac "∀ja ≤ (Suc n). (vv j ∘ x) ja ≠ - ∞", simp)
apply (erule exE)
apply (subgoal_tac "∀N. L < N ⟶ (∀ja ≤ (Suc n). (ja ≠ j ⟶
an m ≤ vv j (x ja) + (vv j (1⇩r ± -⇩a (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) ja)^⇗K N⇖)^⇗K N⇖)))
∧ (ja = j ⟶ (an m) ≤ vv j (x j) + (vv j (1⇩r ± -⇩a (1⇩r ±
-⇩a ((Ω⇘K vv (Suc n)⇙) j)^⇗K N⇖)^⇗K N⇖ ± -⇩a (1⇩r)))))")
apply blast
apply (rule allI, rule impI)+
apply (case_tac "ja = j", simp)
apply (thin_tac "∀N. 1⇩r ± -⇩a (1⇩r ± -⇩a (Ω⇘K vv (Suc n)⇙) j^⇗K N⇖)^⇗K N⇖ ± -⇩a 1⇩r ∈
carrier K")
apply (thin_tac "∀l≤Suc n. x l ∈ carrier K")
apply (drule_tac x = N in spec)
apply (drule_tac a = j in forall_spec, assumption,
thin_tac "∀ja≤Suc n. 1⇩r ± -⇩a (1⇩r ± -⇩a (Ω⇘K vv (Suc n)⇙) ja^⇗K N⇖)^⇗K N⇖
∈ carrier K")
apply (cut_tac N = N in ApproximationTr0 [of "(Ω⇘K vv (Suc n)⇙) j"])
apply (simp add:Ostrowski_base_mem)
apply (frule Ring.ring_one[of "K"], frule aGroup.ag_mOp_closed[of "K" "1⇩r"],
assumption) apply (
frule_tac x = "(1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) j)^⇗K N⇖)^⇗K N⇖" in
aGroup.ag_mOp_closed[of "K"], assumption+)
apply (simp only:aGroup.ag_pOp_assoc)
apply (simp only:aGroup.ag_pOp_commute[of "K" _ "-⇩a 1⇩r"])
apply (simp only:aGroup.ag_pOp_assoc[THEN sym])
apply (simp add:aGroup.ag_r_inv1)
apply (simp add:aGroup.ag_l_zero) apply (simp only:val_minus_eq)
apply (thin_tac "(1⇩r ± -⇩a (Ω⇘K vv (Suc n)⇙) j^⇗K N⇖)^⇗K N⇖ ∈ carrier K",
thin_tac "-⇩a (1⇩r ± -⇩a (Ω⇘K vv (Suc n)⇙) j^⇗K N⇖)^⇗K N⇖ ∈ carrier K")
apply (subst val_exp_ring[THEN sym, of "vv j"], assumption+)
apply (rule aGroup.ag_pOp_closed[of "K"], assumption+)
apply (rule aGroup.ag_mOp_closed[of "K"], assumption)
apply (rule Ring.npClose, assumption+) apply (simp add:Ostrowski_base_mem)
apply (rule Ostrowski_base_npow_not_one) apply simp apply assumption+
apply (drule_tac a = N in forall_spec, assumption)
apply (drule_tac a = j in forall_spec, assumption)
apply (frule Ostrowski_baseTr1[of "n" "vv" "j"], assumption+)
apply (frule_tac n = "N - Suc 0" in val_1mx_pow[of "vv j" "(Ω⇘K vv (Suc n)⇙) j"])
apply (simp add:Ostrowski_base_mem) apply assumption
apply (thin_tac "vv j (x j) ≠ - ∞") apply (simp only:Suc_pred)
apply (thin_tac "0 < vv j (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) j))")
apply (cut_tac b = "vv j (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) j)^⇗K N⇖)" and N = N in
asprod_ge) apply assumption apply simp
apply (cut_tac x = "an N" and y = "int N *⇩a vv j (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) j)^⇗K N⇖)" in aadd_le_mono[of _ _ "vv j (x j)"], assumption)
apply (simp add:aadd_commute)
apply simp
apply (frule_tac aa = "(Ω⇘K vv (Suc n)⇙) ja" and N = N in
ApproximationTr2[of "vv j"])
apply (simp add:Ostrowski_base_mem)
apply (rule Ostrowski_base_nonzero, assumption+)
apply (frule_tac l = ja in Ostrowski_baseTr0[of "n" "vv"], assumption+,
erule conjE)
apply (rotate_tac -1, frule_tac a = j in forall_spec) apply assumption
apply (frule_tac x = j in bspec, simp)
apply (rule aless_imp_le) apply blast
apply (rotate_tac -5,
drule_tac a = N in forall_spec, assumption)
apply (rotate_tac -2,
drule_tac a = ja in forall_spec, assumption) apply (
drule_tac a = ja in forall_spec, assumption)
apply (frule_tac l = ja in Ostrowski_baseTr0[of "n" "vv"], assumption+)
apply (erule conjE, rotate_tac -1,
frule_tac a = j in forall_spec, assumption+)
apply (thin_tac "vv j (x ja) ≠ - ∞")
apply (cut_tac b = "vv j ((Ω⇘K vv (Suc n)⇙) ja)" and N = N in asprod_ge)
apply simp apply simp
apply (frule_tac x = "an N" and y = "int N *⇩a vv j ((Ω⇘K vv (Suc n)⇙) ja)" and
z = "vv j (x ja)" in aadd_le_mono)
apply (frule_tac x = "int N *⇩a vv j ((Ω⇘K vv (Suc n)⇙) ja)" and y = "(vv j)
(1⇩r ± -⇩a (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) ja)^⇗K N⇖)^⇗K N⇖)" and z = "vv j (x ja)"
in aadd_le_mono)
apply (frule_tac i = "an N + vv j (x ja)" and
j = "int N *⇩a vv j ((Ω⇘K vv (Suc n)⇙) ja) + vv j (x ja)" and
k = "vv j (1⇩r ± -⇩a (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) ja)^⇗K N⇖)^⇗K N⇖) +
vv j (x ja)" in ale_trans, assumption+)
apply (subst aadd_commute)
apply (frule_tac x = "an m" and y = "vv j (x ja) + an N" in aless_imp_le)
apply (rule_tac j = "vv j (x ja) + an N" in ale_trans[of "an m"],
assumption)
apply (simp add:aadd_commute)
apply (rule allI, rule impI, subst comp_def)
apply (frule_tac a = ja in forall_spec, assumption)
apply (frule_tac x = "x ja" in value_in_aug_inf[of "vv j"], assumption+)
apply (simp add:aug_inf_def)
apply (rule allI)
apply (rule aGroup.ag_pOp_closed, assumption+) apply blast
apply (rule aGroup.ag_mOp_closed, assumption, rule Ring.ring_one, assumption)
apply ((rule allI)+, rule impI)
apply (rule_tac aa = "(Ω⇘K vv (Suc n)⇙) ja" in ApproximationTr1,
simp add:Ostrowski_base_mem)
done
definition
app_lb :: "[_ , nat, nat ⇒ 'b ⇒ ant, nat ⇒ 'b, nat] ⇒
(nat ⇒ nat)" ("(5Ψ⇘_ _ _ _ _⇙)" [98,98,98,98,99]98) where
"Ψ⇘K n vv x m⇙ = (λj∈{h. h ≤ n}. (SOME L. (∀N. L < N ⟶
(an m) ≤ (vv j (Σ⇩e K (λj∈{h. h ≤ n}. (x j) ⋅⇩r⇘K⇙ (1⇩r⇘K⇙ ±⇘K⇙ -⇩a⇘K⇙
(1⇩r⇘K⇙ ±⇘K⇙ -⇩a⇘K⇙ ((Ω⇘K vv n⇙) j)^⇗K N⇖)^⇗K N⇖)) n ±⇘K⇙ -⇩a⇘K⇙ (x j))))))"
lemma (in Corps) app_LB:"⟦vals_nonequiv K (Suc n) vv;
∀l≤ (Suc n). x l ∈ carrier K; j ≤ (Suc n)⟧ ⟹
∀N. (Ψ⇘K (Suc n) vv x m⇙) j < N ⟶ (an m) ≤
(vv j (Σ⇩e K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅⇩r (1⇩r ± -⇩a (1⇩r ±
-⇩a ((Ω⇘K vv (Suc n)⇙) j)^⇗K N⇖)^⇗K N⇖)) (Suc n) ± -⇩a (x j)))"
apply (frule ApproximationTr3[of "n" "vv" "x" "j" "m"],
assumption+)
apply (simp del:nsum_suc add:app_lb_def) apply (rule allI)
apply (rule someI2_ex) apply assumption+
apply (rule impI) apply blast
done
lemma (in Corps) ApplicationTr4:"⟦vals_nonequiv K (Suc n) vv;
∀j∈{h. h ≤ (Suc n)}. x j ∈ carrier K⟧ ⟹
∃l. ∀N. l < N ⟶ (∀j ≤ (Suc n). (an m) ≤
(vv j (Σ⇩e K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅⇩r (1⇩r ± -⇩a (1⇩r ±
-⇩a ((Ω⇘K vv (Suc n)⇙) j)^⇗K N⇖)^⇗K N⇖)) (Suc n) ± -⇩a (x j))))"
apply (subgoal_tac "∀N. (m_max (Suc n) (Ψ⇘K (Suc n) vv x m⇙)) < N ⟶
(∀j≤ (Suc n). (an m) ≤
(vv j (Σ⇩e K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅⇩r (1⇩r ± -⇩a (1⇩r ±
-⇩a ((Ω⇘K vv (Suc n)⇙) j)^⇗K N⇖)^⇗K N⇖)) (Suc n) ± -⇩a (x j))))")
apply blast
apply (rule allI, rule impI)+
apply (frule_tac j = j in app_LB[of "n" "vv" "x" _ "m"],
simp, assumption,
subgoal_tac "(Ψ⇘K (Suc n) vv x m⇙) j < N", blast)
apply (frule_tac l = j and n = "Suc n" and f = "Ψ⇘K (Suc n) vv x m⇙" in m_max_gt,
frule_tac x = "(Ψ⇘K (Suc n) vv x m⇙) j" and
y = "m_max (Suc n) (Ψ⇘K (Suc n) vv x m⇙)" and z = N in le_less_trans,
assumption+)
done
theorem (in Corps) Approximation_thm:"⟦vals_nonequiv K (Suc n) vv;
∀j≤ (Suc n). (x j) ∈ carrier K⟧ ⟹
∃y∈carrier K. ∀j≤ (Suc n). (an m) ≤ (vv j (y ± -⇩a (x j)))"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (subgoal_tac "∃l. (∀N. l < N ⟶ (∀j ≤ (Suc n). (an m) ≤ ((vv j) ((nsum K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅⇩r (1⇩r ± -⇩a (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) j)^⇗K N⇖)^⇗K N⇖)) (Suc n)) ± -⇩a (x j)))))")
apply (erule exE)
apply (rename_tac M)
apply (subgoal_tac "∀j≤ (Suc n). (an m) ≤
(vv j ( (Σ⇩e K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅⇩r (1⇩r ± -⇩a (1⇩r ±
-⇩a ((Ω⇘K vv (Suc n)⇙) j)^⇗K (Suc M)⇖)^⇗K (Suc M)⇖)) (Suc n)) ± -⇩a (x j)))")
apply (subgoal_tac "Σ⇩e K (λj∈{h. h ≤ (Suc n)}. (x j) ⋅⇩r (1⇩r ±
-⇩a (1⇩r ± -⇩a ((Ω⇘K vv (Suc n)⇙) j)^⇗K (Suc M)⇖)^⇗K (Suc M)⇖)) (Suc n) ∈ carrier K")
apply blast
apply (rule aGroup.nsum_mem[of "K" "Suc n"], assumption+)
apply (rule allI, rule impI, simp del:nsum_suc npow_suc)
apply (rule Ring.ring_tOp_closed, assumption+, simp,
rule ApproximationTr1, simp add:Ostrowski_base_mem)
apply (subgoal_tac "M < Suc M") apply blast
apply simp
apply (rule ApplicationTr4[of n vv x], assumption+)
apply simp
done
definition
distinct_pds :: "[_, nat, nat ⇒ ('b ⇒ ant) set] ⇒ bool" where
"distinct_pds K n P ⟷ (∀j≤ n. P j ∈ Pds⇘ K⇙) ∧
(∀l≤ n. ∀m≤ n. l ≠ m ⟶ P l ≠ P m)"
lemma (in Corps) distinct_pds_restriction:"⟦distinct_pds K (Suc n) P⟧ ⟹
distinct_pds K n P"
apply (simp add:distinct_pds_def)
done
lemma (in Corps) ring_n_distinct_prime_divisors:"distinct_pds K n P ⟹
Ring (Sr K {x. x∈carrier K ∧ (∀j≤ n. 0 ≤ ((ν⇘ K (P j)⇙) x))})"
apply (simp add:distinct_pds_def) apply (erule conjE)
apply (cut_tac field_is_ring)
apply (rule Ring.Sr_ring, assumption+)
apply (subst sr_def)
apply (rule conjI)
apply (rule subsetI) apply simp
apply (rule conjI)
apply (simp add:Ring.ring_one)
apply (rule allI, rule impI)
apply (cut_tac P = "P j" in representative_of_pd_valuation, simp,
simp add:value_of_one)
apply (rule ballI)+
apply simp
apply (frule Ring.ring_is_ag[of "K"]) apply (erule conjE)+
apply (frule_tac x = y in aGroup.ag_mOp_closed[of "K"], assumption+)
apply (frule_tac x = x and y = "-⇩a y" in aGroup.ag_pOp_closed[of "K"],
assumption+)
apply simp
apply (rule conjI)
apply (rule allI, rule impI)
apply (rotate_tac -4, frule_tac a = j in forall_spec, assumption,
rotate_tac -3,
drule_tac a = j in forall_spec, assumption)
apply (cut_tac P = "P j" in representative_of_pd_valuation, simp)
apply (frule_tac v = "ν⇘K (P j)⇙" and x = x and y = "-⇩a y" in amin_le_plus,
assumption+)
apply (simp add:val_minus_eq)
apply (frule_tac x = "(ν⇘K (P j)⇙) x" and y = "(ν⇘K (P j)⇙) y" in amin_ge1[of "0"])
apply simp
apply (rule_tac j = "amin ((ν⇘K (P j)⇙) x) ((ν⇘K (P j)⇙) y)" and k = "(ν⇘K (P j)⇙) (x ± -⇩a y)" in ale_trans[of "0"], assumption+)
apply (simp add:Ring.ring_tOp_closed)
apply (rule allI, rule impI,
cut_tac P = "P j" in representative_of_pd_valuation, simp,
subst val_t2p [where v="ν⇘K P j⇙"], assumption+,
rule aadd_two_pos, simp+)
done
lemma (in Corps) distinct_pds_valuation:"⟦j ≤ (Suc n);
distinct_pds K (Suc n) P⟧ ⟹ valuation K (ν⇘K (P j)⇙)"
apply (rule_tac P = "P j" in representative_of_pd_valuation)
apply (simp add:distinct_pds_def)
done
lemma (in Corps) distinct_pds_valuation1:"⟦0 < n; j ≤ n; distinct_pds K n P⟧
⟹ valuation K (ν⇘K (P j)⇙)"
apply (rule distinct_pds_valuation[of "j" "n - Suc 0" "P"])
apply simp+
done
lemma (in Corps) distinct_pds_valuation2:"⟦j ≤ n; distinct_pds K n P⟧ ⟹
valuation K (ν⇘K (P j)⇙)"
apply (case_tac "n = 0",
simp add:distinct_pds_def,
subgoal_tac "0 ∈ {0::nat}",
simp add:representative_of_pd_valuation[of "P 0"],
simp)
apply (simp add:distinct_pds_valuation1[of "n"])
done
definition
ring_n_pd :: "[('b, 'm) Ring_scheme, nat ⇒ ('b ⇒ ant) set,
nat ] ⇒ ('b, 'm) Ring_scheme"
("(3O⇘_ _ _⇙)" [98,98,99]98) where
"O⇘K P n⇙ = Sr K {x. x ∈ carrier K ∧
(∀j ≤ n. 0 ≤ ((ν⇘K (P j)⇙) x))}"
lemma (in Corps) ring_n_pd:"distinct_pds K n P ⟹ Ring (O⇘K P n⇙)"
by (simp add:ring_n_pd_def, simp add:ring_n_distinct_prime_divisors)
lemma (in Corps) ring_n_pd_Suc:"distinct_pds K (Suc n) P ⟹
carrier (O⇘ K P (Suc n)⇙) ⊆ carrier (O⇘K P n⇙)"
apply (rule subsetI)
apply (simp add:ring_n_pd_def Sr_def)
done
lemma (in Corps) ring_n_pd_pOp_K_pOp:"⟦distinct_pds K n P; x∈carrier (O⇘K P n⇙);
y ∈ carrier (O⇘K P n⇙)⟧ ⟹ x ±⇘(O⇘K P n⇙)⇙ y = x ± y"
apply (simp add:ring_n_pd_def Sr_def)
done
lemma (in Corps) ring_n_pd_tOp_K_tOp:"⟦distinct_pds K n P; x ∈carrier (O⇘K P n⇙);
y ∈ carrier (O⇘K P n⇙)⟧ ⟹ x ⋅⇩r⇘(O⇘K P n⇙)⇙ y = x ⋅⇩r y"
apply (simp add:ring_n_pd_def Sr_def)
done
lemma (in Corps) ring_n_eSum_K_eSumTr:"distinct_pds K n P ⟹
(∀j≤m. f j ∈ carrier (O⇘K P n⇙)) ⟶ nsum (O⇘K P n⇙) f m = nsum K f m"
apply (induct_tac m)
apply (rule impI, simp)
apply (rule impI, simp,
subst ring_n_pd_pOp_K_pOp, assumption+,
frule_tac n = n in ring_n_pd[of _ "P"],
frule_tac Ring.ring_is_ag, drule sym, simp)
apply (rule aGroup.nsum_mem, assumption+, simp+)
done
lemma (in Corps) ring_n_eSum_K_eSum:"⟦distinct_pds K n P;
∀j ≤ m. f j ∈ carrier (O⇘K P n⇙)⟧ ⟹ nsum (O⇘K P n⇙) f m = nsum K f m"
apply (simp add:ring_n_eSum_K_eSumTr)
done
lemma (in Corps) ideal_eSum_closed:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I;
∀j ≤ m. f j ∈ I⟧ ⟹ nsum K f m ∈ I"
apply (frule ring_n_pd[of "n" "P"]) thm Ring.ideal_nsum_closed
apply (frule_tac n = m in
Ring.ideal_nsum_closed[of "(O⇘K P n⇙)" "I" _ "f"], assumption+)
apply (subst ring_n_eSum_K_eSum [THEN sym, of n P m f], assumption+,
rule allI, simp add:Ring.ideal_subset)
apply assumption
done
definition
prime_n_pd :: "[_, nat ⇒ ('b ⇒ ant) set,
nat, nat] ⇒ 'b set"
("(4P⇘_ _ _⇙ _)" [98,98,98,99]98) where
"P⇘K P n⇙ j = {x. x ∈ (carrier (O⇘K P n⇙)) ∧ 0 < ((ν⇘K (P j)⇙) x)}"
lemma (in Corps) zero_in_ring_n_pd_zero_K:"distinct_pds K n P ⟹
𝟬⇘(O⇘K P n⇙)⇙ = 𝟬⇘K⇙"
apply (simp add:ring_n_pd_def Sr_def)
done
lemma (in Corps) one_in_ring_n_pd_one_K:"distinct_pds K n P ⟹
1⇩r⇘(O⇘K P n⇙)⇙ = 1⇩r"
apply (simp add:ring_n_pd_def Sr_def)
done
lemma (in Corps) mem_ring_n_pd_mem_K:"⟦distinct_pds K n P; x ∈carrier (O⇘K P n⇙)⟧
⟹ x ∈ carrier K"
apply (simp add:ring_n_pd_def Sr_def)
done
lemma (in Corps) ring_n_tOp_K_tOp:"⟦distinct_pds K n P; x ∈ carrier (O⇘K P n⇙);
y ∈ carrier (O⇘K P n⇙)⟧ ⟹ x ⋅⇩r⇘(O⇘K P n⇙)⇙ y = x ⋅⇩r y"
apply (simp add:ring_n_pd_def Sr_def)
done
lemma (in Corps) ring_n_exp_K_exp:"⟦distinct_pds K n P; x ∈ carrier (O⇘K P n⇙)⟧
⟹ x^⇗K m⇖ = x^⇗(O⇘K P n⇙) m⇖"
apply (frule ring_n_pd[of "n" "P"])
apply (induct_tac m) apply simp
apply (simp add:one_in_ring_n_pd_one_K)
apply simp
apply (frule_tac n = na in Ring.npClose[of "O⇘K P n⇙" "x"], assumption+)
apply (simp add:ring_n_tOp_K_tOp)
done
lemma (in Corps) prime_n_pd_prime:"⟦distinct_pds K n P; j ≤ n⟧ ⟹
prime_ideal (O⇘K P n⇙) (P⇘K P n⇙ j)"
apply (subst prime_ideal_def)
apply (rule conjI)
apply (simp add:ideal_def)
apply (rule conjI)
apply (rule aGroup.asubg_test)
apply (frule ring_n_pd[of "n" "P"], simp add:Ring.ring_is_ag)
apply (rule subsetI, simp add:prime_n_pd_def)
apply (subgoal_tac "𝟬⇘(O⇘K P n⇙)⇙ ∈ P⇘K P n⇙ j")
apply blast
apply (simp add:zero_in_ring_n_pd_zero_K)
apply (simp add:prime_n_pd_def)
apply (simp add: ring_n_pd_def Sr_def)
apply (cut_tac field_is_ring, simp add:Ring.ring_zero)
apply (rule conjI) apply (rule allI, rule impI)
apply (cut_tac P = "P ja" in representative_of_pd_valuation,
simp add:distinct_pds_def, simp add:value_of_zero)
apply (cut_tac P = "P j" in representative_of_pd_valuation,
simp add:distinct_pds_def, simp add:value_of_zero)
apply (simp add:ant_0[THEN sym])
apply (rule ballI)+
apply (simp add:prime_n_pd_def) apply (erule conjE)+
apply (frule ring_n_pd [of "n" "P"], frule Ring.ring_is_ag[of "O⇘K P n⇙"])
apply (frule_tac x = b in aGroup.ag_mOp_closed[of "O⇘K P n⇙"], assumption+)
apply (simp add:aGroup.ag_pOp_closed)
apply (thin_tac "Ring (O⇘K P n⇙)") apply (thin_tac "aGroup (O⇘K P n⇙)")
apply (simp add:ring_n_pd_def Sr_def)
apply (erule conjE)+
apply (cut_tac v = "ν⇘K (P j)⇙" and x = a and y = "-⇩a b" in
amin_le_plus)
apply (rule_tac P = "P j" in representative_of_pd_valuation,
simp add:distinct_pds_def)
apply assumption+
apply (cut_tac P = "P j" in representative_of_pd_valuation)
apply (simp add:distinct_pds_def)
apply (frule_tac x = "(ν⇘K (P j)⇙) a" and y = "(ν⇘K (P j)⇙) (-⇩a b)" in
amin_gt[of "0"])
apply (simp add:val_minus_eq)
apply (frule_tac y = "amin ((ν⇘K (P j)⇙) a) ((ν⇘K (P j)⇙) (-⇩a b))" and
z = "(ν⇘K (P j)⇙) ( a ± -⇩a b)" in aless_le_trans[of "0"], assumption+)
apply (rule ballI)+
apply (frule ring_n_pd [of "n" "P"])
apply (frule_tac x = r and y = x in Ring.ring_tOp_closed[of "O⇘K P n⇙"],
assumption+)
apply (simp add:prime_n_pd_def)
apply (cut_tac P = "P j" in representative_of_pd_valuation,
simp add:distinct_pds_def)
apply (thin_tac "Ring (O⇘K P n⇙)")
apply (simp add:prime_n_pd_def ring_n_pd_def Sr_def, (erule conjE)+,
simp add:val_t2p)
apply (subgoal_tac "0 ≤ ((ν⇘K (P j)⇙) r)")
apply (simp add:aadd_pos_poss, simp)
apply (rule conjI,
rule contrapos_pp, simp+,
simp add:prime_n_pd_def,
(erule conjE)+, simp add: one_in_ring_n_pd_one_K,
simp add:distinct_pds_def, (erule conjE)+,
cut_tac representative_of_pd_valuation[of "P j"],
simp add:value_of_one, simp)
apply ((rule ballI)+, rule impI)
apply (rule contrapos_pp, simp+, erule conjE,
simp add:prime_n_pd_def, (erule conjE)+,
simp add:ring_n_pd_def Sr_def, (erule conjE)+,
simp add:aneg_less,
frule_tac x = "(ν⇘K (P j)⇙) x" in ale_antisym[of _ "0"], simp,
frule_tac x = "(ν⇘K (P j)⇙) y" in ale_antisym[of _ "0"], simp)
apply (simp add:distinct_pds_def, (erule conjE)+,
cut_tac representative_of_pd_valuation[of "P j"],
simp add:val_t2p aadd_0_l,
simp)
done
lemma (in Corps) n_eq_val_eq_idealTr:
"⟦distinct_pds K n P; x ∈ carrier (O⇘K P n⇙); y ∈ carrier (O⇘K P n⇙);
∀j ≤ n. ((ν⇘K (P j)⇙) x) ≤ ((ν⇘K (P j)⇙) y)⟧ ⟹ Rxa (O⇘K P n⇙) y ⊆ Rxa (O⇘K P n⇙) x"
apply (subgoal_tac "∀j ≤ n. valuation K (ν⇘K (P j)⇙)")
apply (case_tac "x = 𝟬⇘(O⇘K P n⇙)⇙",
simp add:zero_in_ring_n_pd_zero_K)
apply (simp add:value_of_zero)
apply (subgoal_tac "y = 𝟬", simp,
drule_tac a = n in forall_spec, simp,
drule_tac a=n in forall_spec, simp)
apply (cut_tac inf_ge_any[of "(ν⇘K (P n)⇙) y"],
frule ale_antisym[of "(ν⇘K (P n)⇙) y" "∞"], assumption+)
apply (rule value_inf_zero, assumption+)
apply (simp add:mem_ring_n_pd_mem_K, assumption)
apply (frule ring_n_pd[of n P])
apply (subgoal_tac "∀j≤n. 0 ≤ ((ν⇘K (P j)⇙) (y ⋅⇩r (x⇗‐K⇖)))")
apply (subgoal_tac "(y ⋅⇩r (x⇗‐K⇖)) ∈ carrier (O⇘K P n⇙)")
apply (cut_tac field_frac_mul[of "y" "x"],
frule Ring.rxa_in_Rxa[of "O⇘K P n⇙" "x" "y ⋅⇩r (x⇗‐K⇖)"], assumption+,
simp add:ring_n_pd_tOp_K_tOp[THEN sym],
frule Ring.principal_ideal[of "O⇘K P n⇙" "x"], assumption+)
apply (cut_tac Ring.ideal_cont_Rxa[of "O⇘K P n⇙" "(O⇘K P n⇙) ♢⇩p x" "y"],
assumption+,
simp add:mem_ring_n_pd_mem_K,
simp add:mem_ring_n_pd_mem_K,
simp add:zero_in_ring_n_pd_zero_K)
apply (frule Ring.rxa_in_Rxa[of "O⇘K P n⇙" "x" "y ⋅⇩r (x⇗‐K⇖)"], assumption+,
simp add:ring_n_pd_def Sr_def,
(erule conjE)+,
cut_tac field_is_ring, rule Ring.ring_tOp_closed, assumption+,
cut_tac invf_closed1[of x], simp, simp,
simp add:ring_n_pd_def Sr_def)
apply (cut_tac Ring.ring_tOp_closed, assumption+,
cut_tac field_is_ring, assumption+, simp+,
cut_tac invf_closed1[of x], simp, simp)
apply (rule allI, rule impI, drule_tac a = j in forall_spec, assumption+,
cut_tac invf_closed1[of x], simp, erule conjE)
apply (subst val_t2p [where v="ν⇘K P j⇙"], simp,
rule mem_ring_n_pd_mem_K[of "n" "P" "y"], assumption+,
frule_tac x = j in spec, simp,
simp add:zero_in_ring_n_pd_zero_K)
apply (subst value_of_inv [where v="ν⇘K P j⇙"], simp,
simp add:ring_n_pd_def Sr_def, assumption+)
apply (frule_tac x = "(ν⇘K (P j)⇙) x" and y = "(ν⇘K (P j)⇙) y" in ale_diff_pos,
simp add:diff_ant_def,
simp add:mem_ring_n_pd_mem_K[of "n" "P" "x"] zero_in_ring_n_pd_zero_K)
apply (rule allI, rule impI,
simp add:distinct_pds_def, (erule conjE)+,
rule_tac P = "P j" in representative_of_pd_valuation, simp)
done
lemma (in Corps) n_eq_val_eq_ideal:"⟦distinct_pds K n P; x ∈ carrier (O⇘K P n⇙);
y ∈ carrier (O⇘K P n⇙); ∀j ≤ n.((ν⇘K (P j)⇙) x) = ((ν⇘K (P j)⇙) y)⟧ ⟹
Rxa (O⇘K P n⇙) x = Rxa (O⇘K P n⇙) y"
apply (rule equalityI)
apply (subgoal_tac "∀j≤ n. (ν⇘K (P j)⇙) y ≤ ((ν⇘K (P j)⇙) x)")
apply (rule n_eq_val_eq_idealTr, assumption+)
apply (rule allI, rule impI, simp)
apply (subgoal_tac "∀j≤ n. (ν⇘K (P j)⇙) x ≤ ((ν⇘K (P j)⇙) y)")
apply (rule n_eq_val_eq_idealTr, assumption+)
apply (rule allI, rule impI)
apply simp
done
definition
mI_gen :: "[_ , nat ⇒ ('r ⇒ ant) set, nat, 'r set] ⇒ 'r" where
"mI_gen K P n I = (SOME x. x ∈ I ∧
(∀j ≤ n. (ν⇘K (P j)⇙) x = LI K (ν⇘K (P j)⇙) I))"
definition
mL :: "[_, nat ⇒ ('r ⇒ ant) set, 'r set, nat] ⇒ int" where
"mL K P I j = tna (LI K (ν⇘K (P j)⇙) I)"
lemma (in Corps) mI_vals_nonempty:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I; j≤n⟧
⟹ (ν⇘K (P j)⇙) ` I ≠ {}"
apply (frule ring_n_pd[of "n" "P"])
apply (frule Ring.ideal_zero [of "O⇘K P n⇙" "I"], assumption+)
apply (simp add:image_def)
apply blast
done
lemma (in Corps) mI_vals_LB:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I; j ≤ n⟧ ⟹
((ν⇘K (P j)⇙) `I) ⊆ LBset (ant 0)"
apply (rule subsetI)
apply (simp add:image_def, erule bexE)
apply (frule ring_n_pd[of "n" "P"])
apply (frule_tac h = xa in Ring.ideal_subset[of "O⇘K P n⇙" "I"], assumption+)
apply (thin_tac "ideal (O⇘K P n⇙) I")
apply (thin_tac "Ring (O⇘K P n⇙)")
apply (simp add: ring_n_pd_def Sr_def) apply (erule conjE)+
apply (drule_tac a = j in forall_spec, simp)
apply (simp add:LBset_def ant_0)
done
lemma (in Corps) mL_hom:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; I ≠ carrier (O⇘K P n⇙)⟧ ⟹
∀j ≤ n. mL K P I j ∈ Zset"
apply (rule allI, rule impI)
apply (simp add:mL_def LI_def)
apply (simp add:Zset_def)
done
lemma (in Corps) ex_Zleast_in_mI:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I; j ≤ n⟧
⟹ ∃x∈I. (ν⇘K (P j)⇙) x = LI K (ν⇘K (P j)⇙) I"
apply (frule_tac j = j in mI_vals_nonempty[of "n" "P" "I"], assumption+)
apply (frule_tac j = j in mI_vals_LB[of "n" "P" "I"], assumption+)
apply (frule_tac A = "(ν⇘K (P j)⇙) ` I" and z = 0 in AMin_mem, assumption+)
apply (simp add:LI_def)
apply (thin_tac "(ν⇘K (P j)⇙) ` I ⊆ LBset (ant 0)")
apply (simp add:image_def, erule bexE)
apply (drule sym)
apply blast
done
lemma (in Corps) val_LI_pos:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; j ≤ n⟧ ⟹ 0 ≤ LI K (ν⇘K (P j)⇙) I"
apply (frule_tac j = j in mI_vals_nonempty[of n P I], assumption+)
apply (frule_tac j = j in mI_vals_LB[of n P I], assumption+)
apply (frule_tac A = "(ν⇘K (P j)⇙) ` I" and z = 0 in AMin_mem, assumption+)
apply (simp add:LI_def)
apply (frule subsetD[of "(ν⇘K (P j)⇙) ` I" "LBset (ant 0)" "AMin ((ν⇘K (P j)⇙) ` I)"], assumption+)
apply (simp add:LBset_def ant_0)
done
lemma (in Corps) val_LI_noninf:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; j ≤ n⟧ ⟹ LI K (ν⇘K (P j)⇙) I ≠ ∞"
apply (frule_tac j = j in mI_vals_nonempty[of "n" "P" "I"], assumption+)
apply (frule_tac j = j in mI_vals_LB[of "n" "P" "I"], assumption+)
apply (frule_tac A = "(ν⇘K (P j)⇙) ` I" and z = 0 in AMin, assumption+)
apply (thin_tac "(ν⇘K (P j)⇙) ` I ⊆ LBset (ant 0)",
thin_tac "(ν⇘K (P j)⇙ ) ` I ≠ {}")
apply (frule ring_n_pd[of "n" "P"])
apply (frule Ring.ideal_zero[of "O⇘K P n⇙" "I"], assumption+)
apply (erule conjE, simp add:LI_def)
apply (frule singleton_sub[of "𝟬⇘O⇘K P n⇙⇙" "I"])
apply (frule sets_not_eq[of "I" "{𝟬⇘O⇘K P n⇙⇙}"],
assumption+, erule bexE)
apply (simp add:zero_in_ring_n_pd_zero_K)
apply (subgoal_tac "∃x∈I. AMin ((ν⇘K (P j)⇙) ` I) = (ν⇘K (P j)⇙) x",
erule bexE) apply simp
apply (drule_tac x = a in bspec, assumption)
apply (thin_tac "AMin ((ν⇘K (P j)⇙) ` I) = (ν⇘K (P j)⇙) x")
apply (frule_tac h = a in Ring.ideal_subset[of "O⇘K P n⇙" "I"], assumption+)
apply (frule_tac x = a in mem_ring_n_pd_mem_K[of n P], assumption+)
apply (simp add:distinct_pds_def, (erule conjE)+)
apply (cut_tac representative_of_pd_valuation[of "P j"])
defer apply simp apply blast
apply (frule_tac x = a in val_nonzero_z[of "ν⇘K (P j)⇙"], assumption+,
erule exE, simp)
apply (thin_tac "∀l ≤ n. ∀m ≤ n. l ≠ m ⟶ P l ≠ P m",
thin_tac "(ν⇘K (P j)⇙) a = ant z")
apply (rule contrapos_pp, simp+)
apply (cut_tac x = "ant z" in inf_ge_any)
apply (frule_tac x = "ant z" in ale_antisym[of _ "∞"], assumption+)
apply simp
done
lemma (in Corps) Zleast_in_mI_pos:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; j ≤ n⟧ ⟹ 0 ≤ mL K P I j"
apply (simp add:mL_def)
apply (frule ex_Zleast_in_mI[of "n" "P" "I" "j"], assumption+,
erule bexE, frule sym, thin_tac "(ν⇘K (P j)⇙) x = LI K (ν⇘K (P j)⇙) I")
apply (subgoal_tac "LI K (ν⇘K (P j)⇙) I ≠ ∞", simp)
apply (thin_tac "LI K (ν⇘K (P j)⇙) I = (ν⇘K (P j)⇙) x")
apply (frule ring_n_pd[of "n" "P"])
apply (frule_tac h = x in Ring.ideal_subset[of "O⇘K P n⇙" "I"], assumption+)
apply (thin_tac "ideal (O⇘K P n⇙) I")
apply (thin_tac "Ring (O⇘K P n⇙)")
apply (simp add: ring_n_pd_def Sr_def) apply (erule conjE)
apply (drule_tac a = j in forall_spec, assumption)
apply (simp add:apos_tna_pos)
apply (rule val_LI_noninf, assumption+)
done
lemma (in Corps) Zleast_mL_I:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I; j ≤ n;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; x ∈ I⟧ ⟹ ant (mL K P I j) ≤ ((ν⇘K (P j)⇙) x)"
apply (frule val_LI_pos[of "n" "P" "I" "j"], assumption+)
apply (frule apos_neq_minf[of "LI K (ν⇘K (P j)⇙) I"])
apply (frule val_LI_noninf[of "n" "P" "I" "j"], assumption+)
apply (simp add:mL_def LI_def)
apply (simp add:ant_tna)
apply (frule Zleast_in_mI_pos[of "n" "P" "I" "j"], assumption+)
apply (frule mI_vals_nonempty[of "n" "P" "I" "j"], assumption+)
apply (frule mI_vals_LB[of "n" "P" "I" "j"], assumption+)
apply (frule AMin[of "(ν⇘K (P j)⇙) `I" "0"], assumption+)
apply (erule conjE)
apply (frule Zleast_in_mI_pos[of "n" "P" "I" "j"], assumption+)
apply (simp add:mL_def LI_def)
done
lemma (in Corps) Zleast_LI:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I; j ≤ n;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; x ∈ I⟧ ⟹ (LI K (ν⇘K (P j)⇙) I) ≤ ((ν⇘K (P j)⇙) x)"
apply (frule mI_vals_nonempty[of "n" "P" "I" "j"], assumption+)
apply (frule mI_vals_LB[of "n" "P" "I" "j"], assumption+)
apply (frule AMin[of "(ν⇘K (P j)⇙) `I" "0"], assumption+)
apply (erule conjE)
apply (simp add:LI_def)
done
lemma (in Corps) mpdiv_vals_nonequiv:"distinct_pds K n P ⟹
vals_nonequiv K n (λj. ν⇘K (P j)⇙) "
apply (simp add:vals_nonequiv_def)
apply (rule conjI)
apply (simp add:valuations_def)
apply (rule allI, rule impI)
apply (rule representative_of_pd_valuation,
simp add:distinct_pds_def)
apply ((rule allI, rule impI)+, rule impI)
apply (simp add:distinct_pds_def, erule conjE)
apply (rotate_tac 4) apply (
drule_tac a = j in forall_spec, assumption)
apply (rotate_tac -1,
drule_tac a = l in forall_spec, assumption, simp)
apply (simp add:distinct_p_divisors)
done
definition
KbaseP :: "[_, nat ⇒ ('r ⇒ ant) set, nat] ⇒
(nat ⇒ 'r) ⇒ bool" where
"KbaseP K P n f ⟷ (∀j ≤ n. f j ∈ carrier K) ∧
(∀j ≤ n. ∀l ≤ n. (ν⇘K (P j)⇙) (f l) = (δ⇘j l⇙))"
definition
Kbase :: "[_, nat, nat ⇒ ('r ⇒ ant) set]
⇒ (nat ⇒ 'r)" ("(3Kb⇘_ _ _⇙)" [95,95,96]95) where
"Kb⇘K n P ⇙ = (SOME f. KbaseP K P n f)"
lemma (in Corps) KbaseTr:"distinct_pds K n P ⟹ ∃f. KbaseP K P n f"
apply (simp add: KbaseP_def)
apply (frule mpdiv_vals_nonequiv[of "n" "P"])
apply (case_tac "n = 0")
apply (simp add:vals_nonequiv_def valuations_def)
apply (simp add:distinct_pds_def)
apply (frule n_val_n_val1[of "P 0"])
apply (frule n_val_surj[of "ν⇘K (P 0)⇙"])
apply (erule bexE)
apply (subgoal_tac " ((λj∈{0::nat}. x) (0::nat)) ∈ carrier K ∧
(ν⇘K (P 0)⇙) ((λj∈{0::nat}. x) (0::nat)) = (δ⇘0 0⇙)")
apply blast
apply (rule conjI)
apply simp apply (simp add:Kronecker_delta_def)
apply (cut_tac Approximation1_5[of "n - Suc 0" "λj. ν⇘K (P j)⇙"])
apply simp
apply simp+
apply (rule allI, rule impI)
apply (rule n_val_n_val1 )
apply (simp add:distinct_pds_def)
done
lemma (in Corps) KbaseTr1:"distinct_pds K n P ⟹ KbaseP K P n (Kb⇘K n P ⇙)"
apply (subst Kbase_def)
apply (frule KbaseTr[of n P])
apply (erule exE)
apply (simp add:someI)
done
lemma (in Corps) Kbase_hom:"distinct_pds K n P ⟹
∀j ≤ n. (Kb⇘K n P⇙) j ∈ carrier K"
apply (frule KbaseTr1[of "n" "P"])
apply (simp add:KbaseP_def)
done
lemma (in Corps) Kbase_Kronecker:"distinct_pds K n P ⟹
∀j ≤ n. ∀l ≤ n. (ν⇘K (P j)⇙) ((Kb⇘K n P⇙) l) = δ⇘j l⇙"
apply (frule KbaseTr1[of n P])
apply (simp add:KbaseP_def)
done
lemma (in Corps) Kbase_nonzero:"distinct_pds K n P ⟹
∀j ≤ n. (Kb⇘K n P⇙) j ≠ 𝟬"
apply (rule allI, rule impI)
apply (frule Kbase_Kronecker[of n P])
apply (subgoal_tac "(ν⇘K (P j)⇙) ((Kb⇘K n P⇙) j) = δ⇘j j⇙")
apply (thin_tac "∀j≤n. (∀l≤n. ((ν⇘K P j⇙) ((Kb⇘K n P⇙) l)) = δ⇘j l⇙)")
apply (simp add:Kronecker_delta_def)
apply (rule contrapos_pp, simp+)
apply (cut_tac P = "P j" in representative_of_pd_valuation)
apply (simp add:distinct_pds_def)
apply (simp only:value_of_zero, simp only:ant_1[THEN sym],
frule sym, thin_tac " ∞ = ant 1", simp del:ant_1)
apply simp
done
lemma (in Corps) Kbase_hom1:"distinct_pds K n P ⟹
∀j ≤ n. (Kb⇘K n P⇙) j ∈ carrier K - {𝟬}"
by(simp add:Kbase_nonzero Kbase_hom)
definition
Zl_mI :: "[_, nat ⇒ ('b ⇒ ant) set, 'b set]
⇒ nat ⇒ 'b" where
"Zl_mI K P I j = (SOME x. (x ∈ I ∧ ( (ν⇘K (P j)⇙) x = LI K (ν⇘K (P j)⇙) I)))"
lemma (in Corps) value_Zl_mI:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I; j ≤ n⟧
⟹ (Zl_mI K P I j ∈ I) ∧ (ν⇘K (P j)⇙) (Zl_mI K P I j) = LI K (ν⇘K (P j)⇙) I"
apply (subgoal_tac "∃x. (x ∈ I ∧ ((ν⇘K (P j)⇙) x = LI K (ν⇘K (P j)⇙) I))")
apply (subst Zl_mI_def)+
apply (rule someI2_ex, assumption+)
apply (frule ex_Zleast_in_mI[of "n" "P" "I" "j"], assumption+)
apply (erule bexE, blast)
done
lemma (in Corps) Zl_mI_nonzero:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; j ≤ n⟧ ⟹ Zl_mI K P I j ≠ 𝟬"
apply (case_tac "n = 0")
apply (simp add:distinct_pds_def)
apply (frule representative_of_pd_valuation[of "P 0"])
apply (subgoal_tac "O⇘K P 0⇙ = Vr K (ν⇘K (P 0)⇙)")
apply (subgoal_tac "Zl_mI K P I 0 = Ig K (ν⇘K (P 0)⇙) I")
apply simp apply (simp add:Ig_nonzero)
apply (simp add:Ig_def Zl_mI_def)
apply (simp add:ring_n_pd_def Vr_def)
apply (simp)
apply (frule value_Zl_mI[of n P I j], assumption+)
apply (erule conjE)
apply (rule contrapos_pp, simp+)
apply (frule distinct_pds_valuation1[of n j P], assumption+)
apply (simp add:value_of_zero)
apply (simp add:zero_in_ring_n_pd_zero_K)
apply (frule singleton_sub[of "𝟬" "I"],
frule sets_not_eq[of "I" "{𝟬}"], assumption,
erule bexE, simp)
apply (frule_tac x = a in Zleast_mL_I[of "n" "P" "I" "j"], assumption+)
apply (frule_tac x = a in val_nonzero_z[of "ν⇘K (P j)⇙"])
apply (frule ring_n_pd[of "n" "P"])
apply (frule_tac h = a in Ring.ideal_subset[of "O⇘K P n⇙" "I"], assumption+)
apply (simp add:mem_ring_n_pd_mem_K) apply assumption
apply (simp add:zero_in_ring_n_pd_zero_K) apply assumption
apply (frule val_LI_noninf[THEN not_sym, of "n" "P" "I" "j"], assumption+)
apply (simp add:zero_in_ring_n_pd_zero_K) apply assumption
apply simp
done
lemma (in Corps) Zl_mI_mem_K:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I; l ≤ n⟧
⟹ (Zl_mI K P I l) ∈ carrier K"
apply (frule value_Zl_mI[of "n" "P" "I" "l"], assumption+)
apply (erule conjE)
apply (frule ring_n_pd[of "n" "P"])
apply (frule Ring.ideal_subset[of "O⇘K P n⇙" "I" "Zl_mI K P I l"], assumption+)
apply (simp add:mem_ring_n_pd_mem_K[of "n" "P" "Zl_mI K P I l"])
done
definition
mprod_exp :: "[_, nat ⇒ int, nat ⇒ 'b, nat]
⇒ 'b" where
"mprod_exp K e f n = nprod K (λj. ((f j)⇘K⇙⇗(e j)⇖)) n"
lemma (in Corps) mprod_expR_memTr:"(∀j≤n. f j ∈ carrier K) ⟶
mprod_expR K e f n ∈ carrier K"
apply (cut_tac field_is_ring)
apply (induct_tac n)
apply (rule impI, simp)
apply (simp add:mprod_expR_def)
apply (cut_tac Ring.npClose[of K "f 0" "e 0"], assumption+)
apply (rule impI)
apply simp
apply (subst Ring.mprodR_Suc, assumption+)
apply (simp)
apply (simp)
apply (rule Ring.ring_tOp_closed[of K], assumption+)
apply (rule Ring.npClose, assumption+)
apply simp
done
lemma (in Corps) mprod_expR_mem:"∀j ≤ n. f j ∈ carrier K ⟹
mprod_expR K e f n ∈ carrier K"
apply (cut_tac field_is_ring)
apply (cut_tac Ring.mprod_expR_memTr[of K e n f])
apply simp
apply (subgoal_tac "f ∈ {j. j ≤ n} → carrier K", simp+)
done
lemma (in Corps) mprod_Suc:"⟦ ∀j≤(Suc n). e j ∈ Zset;
∀j ≤ (Suc n). f j ∈ (carrier K - {𝟬})⟧ ⟹
mprod_exp K e f (Suc n) = (mprod_exp K e f n) ⋅⇩r ((f (Suc n))⇘K⇙⇗(e (Suc n))⇖)"
apply (simp add:mprod_exp_def)
done
lemma (in Corps) mprod_memTr:"
(∀j ≤ n. e j ∈ Zset) ∧ (∀j ≤ n. f j ∈ ((carrier K) - {𝟬})) ⟶
(mprod_exp K e f n) ∈ ((carrier K) - {𝟬})"
apply (induct_tac n)
apply (simp, rule impI, (erule conjE)+,
simp add:mprod_exp_def, simp add:npowf_mem,
simp add:field_potent_nonzero1)
apply (rule impI, simp, erule conjE,
cut_tac field_is_ring, cut_tac field_is_idom,
erule conjE, simp add:mprod_Suc)
apply (rule conjI)
apply (rule Ring.ring_tOp_closed[of "K"], assumption+,
simp add:npowf_mem)
apply (rule Idomain.idom_tOp_nonzeros, assumption+,
simp add:npowf_mem, assumption,
simp add:field_potent_nonzero1)
done
lemma (in Corps) mprod_mem:"⟦∀j ≤ n. e j ∈ Zset; ∀j ≤ n. f j ∈ ((carrier K) - {𝟬})⟧ ⟹ (mprod_exp K e f n) ∈ ((carrier K) - {𝟬})"
apply (cut_tac mprod_memTr[of n e f]) apply simp
done
lemma (in Corps) mprod_mprodR:"⟦∀j ≤ n. e j ∈ Zset; ∀j ≤ n. 0 ≤ (e j);
∀j ≤ n. f j ∈ ((carrier K) - {𝟬})⟧ ⟹
mprod_exp K e f n = mprod_expR K (nat o e) f n"
apply (cut_tac field_is_ring)
apply (simp add:mprod_exp_def mprod_expR_def)
apply (rule Ring.nprod_eq, assumption+)
apply (rule allI, rule impI, simp add:npowf_mem)
apply (rule allI, rule impI, rule Ring.npClose, assumption+, simp)
apply (rule allI, rule impI)
apply (simp add:npowf_def)
done
subsection "Representation of an ideal I as a product of prime ideals"
lemma (in Corps) ring_n_mprod_mprodRTr:"distinct_pds K n P ⟹
(∀j ≤ m. e j ∈ Zset) ∧ (∀j ≤ m. 0 ≤ (e j)) ∧
(∀j ≤ m. f j ∈ carrier (O⇘K P n⇙)-{𝟬⇘(O⇘K P n⇙)⇙}) ⟶
mprod_exp K e f m = mprod_expR (O⇘K P n⇙) (nat o e) f m"
apply (frule ring_n_pd[of n P])
apply (induct_tac m)
apply (rule impI, (erule conjE)+,
simp add:mprod_exp_def mprod_expR_def)
apply (erule conjE, simp add:npowf_def, simp add:ring_n_exp_K_exp)
apply (rule impI, (erule conjE)+, simp)
apply (subst mprod_Suc, assumption+,
rule allI, rule impI,
simp add:mem_ring_n_pd_mem_K,
simp add:zero_in_ring_n_pd_zero_K)
apply (subst Ring.mprodR_Suc, assumption+,
simp add:cmp_def,
simp)
apply (simp add:ring_n_pd, simp add:npowf_def,
simp add:ring_n_exp_K_exp)
apply (subst ring_n_tOp_K_tOp, assumption+,
rule Ring.mprod_expR_mem, simp add:ring_n_pd,
simp,
simp)
apply (rule Ring.npClose, simp add:ring_n_pd, simp, simp)
done
lemma (in Corps) ring_n_mprod_mprodR:"⟦distinct_pds K n P; ∀j ≤ m. e j ∈ Zset;
∀j ≤ m. 0 ≤ (e j); ∀j ≤ m. f j ∈ carrier (O⇘K P n⇙)-{𝟬⇘(O⇘K P n⇙)⇙}⟧
⟹ mprod_exp K e f m = mprod_expR (O⇘K P n⇙) (nat o e) f m"
apply (simp add:ring_n_mprod_mprodRTr)
done
lemma (in Corps) value_mprod_expTr:"valuation K v ⟹
(∀j ≤ n. e j ∈ Zset) ∧ (∀j ≤ n. f j ∈ (carrier K - {𝟬})) ⟶
v (mprod_exp K e f n) = ASum (λj. (e j) *⇩a (v (f j))) n"
apply (induct_tac n)
apply simp
apply (rule impI, erule conjE)
apply(simp add:mprod_exp_def val_exp)
apply (rule impI, erule conjE)
apply simp
apply (subst mprod_Suc, assumption+)
apply (rule allI, rule impI, simp)
apply (subst val_t2p[of v], assumption+)
apply (cut_tac n = "n" in mprod_mem[of _ e f],
(rule allI, rule impI, simp)+, simp)
apply (simp add:npowf_mem, simp add:field_potent_nonzero1)
apply (simp add:val_exp[THEN sym, of "v"])
done
lemma (in Corps) value_mprod_exp:"⟦valuation K v; ∀j ≤ n. e j ∈ Zset;
∀j ≤ n. f j ∈ (carrier K - {𝟬})⟧ ⟹
v (mprod_exp K e f n) = ASum (λj. (e j) *⇩a (v (f j))) n"
apply (simp add:value_mprod_expTr)
done
lemma (in Corps) mgenerator0_1:"⟦distinct_pds K (Suc n) P;
ideal (O⇘K P (Suc n)⇙) I; I ≠ {𝟬⇘(O⇘K P (Suc n)⇙)⇙};
I ≠ carrier (O⇘K P (Suc n)⇙); j ≤ (Suc n)⟧ ⟹
((ν⇘K (P j)⇙) (mprod_exp K (mL K P I) (Kb⇘K (Suc n) P⇙) (Suc n))) =
((ν⇘K (P j)⇙) (Zl_mI K P I j))"
apply (frule distinct_pds_valuation[of j n P], assumption+)
apply (frule mL_hom[of "Suc n" "P" "I"], assumption+)
apply (frule Kbase_hom1[of "Suc n" "P"])
apply (frule value_mprod_exp[of "ν⇘K (P j)⇙" "Suc n" "mL K P I"
"Kb⇘K (Suc n) P⇙"], assumption+)
apply (simp del:ASum_Suc)
apply (thin_tac "(ν⇘K (P j)⇙) (mprod_exp K (mL K P I) (Kb⇘K (Suc n) P⇙) (Suc n)) =
ASum (λja. (mL K P I ja) *⇩a (ν⇘K (P j)⇙) ((Kb⇘K (Suc n) P⇙) ja)) (Suc n)")
apply (subgoal_tac "ASum (λja. (mL K P I ja) *⇩a
((ν⇘K (P j)⇙) ((Kb⇘K (Suc n) P⇙) ja))) (Suc n) =
ASum (λja. (mL K P I ja) *⇩a (δ⇘j ja⇙)) (Suc n)")
apply (simp del:ASum_Suc)
apply (subgoal_tac "∀h ≤ (Suc n). (λja. (mL K P I ja) *⇩a (δ⇘j ja⇙)) h ∈ Z⇩∞")
apply (cut_tac eSum_single[of "Suc n" "λja. (mL K P I ja) *⇩a (δ⇘j ja⇙)" "j"])
apply simp
apply (simp add:Kronecker_delta_def asprod_n_0)
apply (rotate_tac -1, drule not_sym)
apply (simp add:mL_def[of "K" "P" "I" "j"])
apply (frule val_LI_noninf[of "Suc n" "P" "I" "j"], assumption+)
apply (rule not_sym, simp, simp)
apply (frule val_LI_pos[of "Suc n" "P" "I" "j"], assumption+,
rotate_tac -2, frule not_sym, simp, simp)
apply (frule apos_neq_minf[of "LI K (ν⇘K (P j)⇙) I"])
apply (simp add:ant_tna)
apply (simp add:value_Zl_mI[of "Suc n" "P" "I" "j"])
apply (rule allI, rule impI)
apply (simp add:Kdelta_in_Zinf, simp)
apply (rule ballI, simp)
apply (simp add:Kronecker_delta_def, erule conjE)
apply (simp add:asprod_n_0)
apply (rule allI, rule impI)
apply (simp add:Kdelta_in_Zinf)
apply (frule Kbase_Kronecker[of "Suc n" "P"])
apply (rule ASum_eq,
rule allI, rule impI,
simp add:Kdelta_in_Zinf,
rule allI, rule impI,
simp add:Kdelta_in_Zinf)
apply (rule allI, rule impI) apply simp
done
lemma (in Corps) mgenerator0_2:"⟦ 0 < n; distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; I ≠ carrier (O⇘K P n⇙); j ≤ n⟧ ⟹
((ν⇘K (P j)⇙) (mprod_exp K (mL K P I) (Kb⇘K n P⇙) n)) = ((ν⇘K (P j)⇙) (Zl_mI K P I j))"
apply (cut_tac mgenerator0_1[of "n - Suc 0" "P" "I" "j"])
apply simp+
done
lemma (in Corps) mgenerator1:"⟦distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; I ≠ carrier (O⇘K P n⇙); j ≤ n⟧ ⟹
((ν⇘K (P j)⇙) (mprod_exp K (mL K P I) (Kb⇘K n P⇙) n)) = ((ν⇘K (P j)⇙) (Zl_mI K P I j))"
apply (case_tac "n = 0",
frule value_Zl_mI[of "n" "P" "I" "j"], assumption+,
frule val_LI_noninf[of "n" "P" "I" "j"], assumption+,
frule val_LI_pos[of "n" "P" "I" "j"], assumption+,
frule apos_neq_minf[of "LI K (ν⇘K (P j)⇙) I"],
simp add:distinct_pds_def, erule conjE)
apply (cut_tac representative_of_pd_valuation[of "P j"], simp+,
simp add:mprod_exp_def,
subst val_exp[THEN sym, of "ν⇘K (P 0)⇙" "(Kb⇘K 0 P⇙) 0"], assumption+,
cut_tac Kbase_hom[of "0" "P"], simp,
simp add:distinct_pds_def,
cut_tac Kbase_nonzero[of "0" "P"], simp+,
simp add:distinct_pds_def)
apply (cut_tac Kbase_nonzero[of "0" "P"], simp add:distinct_pds_def)
apply (cut_tac Kbase_Kronecker[of "0" "P"], simp add:distinct_pds_def)
apply (simp add:Kronecker_delta_def, simp add:mL_def, simp add:ant_tna)
apply (simp add:distinct_pds_def)+
apply (cut_tac mgenerator0_2[of "n" "P" "I" "j"], simp+)
apply (simp add:distinct_pds_def) apply simp+
done
lemma (in Corps) mgenerator2Tr1:"⟦0 < n; j ≤ n; k ≤ n; distinct_pds K n P⟧ ⟹
(ν⇘K (P j)⇙) (mprod_exp K (λl. γ⇘k l⇙ ) (Kb⇘K n P⇙) n) = (γ⇘k j⇙) *⇩a (δ⇘j j⇙)"
apply (frule distinct_pds_valuation1[of "n" "j" "P"], assumption+)
apply (frule K_gamma_hom[of k n])
apply (subgoal_tac "∀j ≤ n. (Kb⇘K n P⇙) j ∈ carrier K - {𝟬}")
apply (simp add:value_mprod_exp[of "ν⇘K (P j)⇙" n "K_gamma k" "(Kb⇘K n P⇙)"])
apply (subgoal_tac "ASum (λja. (γ⇘k ja⇙) *⇩a (ν⇘K (P j)⇙) ((Kb⇘K n P⇙) ja)) n
= ASum (λja. (((γ⇘k ja⇙) *⇩a (δ⇘j ja⇙)))) n")
apply simp
apply (subgoal_tac "∀j ≤ n. (λja. (γ⇘k ja⇙) *⇩a (δ⇘j ja⇙)) j ∈ Z⇩∞")
apply (cut_tac eSum_single[of n "λja. ((γ⇘k ja⇙) *⇩a (δ⇘j ja⇙))" "j"], simp)
apply (rule allI, rule impI, simp add:Kronecker_delta_def,
rule impI, simp add:asprod_n_0 Zero_in_aug_inf, assumption+)
apply (rule ballI, simp)
apply (simp add:K_gamma_def, rule impI, simp add:Kronecker_delta_def)
apply (rule allI, rule impI)
apply (simp add:Kronecker_delta_def, simp add:K_gamma_def)
apply (simp add:ant_0 Zero_in_aug_inf)
apply (cut_tac z_in_aug_inf[of 1], simp add:ant_1)
apply (rule ASum_eq)
apply (rule allI, rule impI)
apply (simp add:K_gamma_def, simp add:Zero_in_aug_inf)
apply (rule impI, rule value_in_aug_inf, assumption+, simp)
apply (simp add:K_gamma_def Zero_in_aug_inf Kdelta_in_Zinf1)
apply (rule allI, rule impI)
apply (simp add:Kbase_Kronecker[of "n" "P"])
apply (rule Kbase_hom1, assumption+)
done
lemma (in Corps) mgenerator2Tr2:"⟦0 < n; j ≤ n; k ≤ n; distinct_pds K n P⟧ ⟹
(ν⇘K (P j)⇙) ((mprod_exp K (λl. γ⇘k l⇙ ) (Kb⇘K n P⇙) n)⇘K⇙⇗m⇖)= ant (m * (γ⇘k j⇙))"
apply (frule K_gamma_hom[of k n])
apply (frule Kbase_hom1[of "n" "P"])
apply (frule mprod_mem[of n "K_gamma k" "Kb⇘K n P⇙"], assumption+)
apply (frule distinct_pds_valuation1[of "n" "j" "P"], assumption+)
apply (simp, erule conjE)
apply (simp add:val_exp[THEN sym])
apply (simp add:mgenerator2Tr1)
apply (simp add:K_gamma_def Kronecker_delta_def)
apply (rule impI)
apply (simp add:asprod_def a_z_z)
done
lemma (in Corps) mgenerator2Tr3_1:"⟦0 < n; j ≤ n; k ≤ n; j = k;
distinct_pds K n P⟧ ⟹
(ν⇘K (P j)⇙) ((mprod_exp K (λl. (γ⇘k l⇙)) (Kb⇘K n P⇙) n)⇘K⇙⇗m⇖) = 0"
apply (simp add:mgenerator2Tr2) apply (simp add:K_gamma_def)
done
lemma (in Corps) mgenerator2Tr3_2:"⟦0 < n; j ≤ n; k ≤ n; j ≠ k;
distinct_pds K n P⟧ ⟹
(ν⇘K (P j)⇙) ((mprod_exp K (λl. (γ⇘k l⇙)) (Kb⇘K n P⇙) n)⇘K⇙⇗m⇖) = ant m"
apply (simp add:mgenerator2Tr2) apply (simp add:K_gamma_def)
done
lemma (in Corps) mgeneratorTr4:"⟦0 < n; distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘O⇘K P n⇙⇙}; I ≠ carrier (O⇘K P n⇙)⟧ ⟹
mprod_exp K (mL K P I) (Kb⇘K n P⇙) n ∈ carrier (O⇘K P n⇙)"
apply (subst ring_n_pd_def)
apply (simp add:Sr_def)
apply (frule mL_hom[of "n" "P" "I"], assumption+)
apply (frule mprod_mem[of n "mL K P I" "Kb⇘K n P⇙"])
apply (rule Kbase_hom1, assumption+)
apply (simp add:mprod_mem)
apply (rule allI, rule impI)
apply (simp add:mgenerator1)
apply (simp add:value_Zl_mI)
apply (simp add:val_LI_pos)
done
definition
m_zmax_pdsI_hom :: "[_, nat ⇒ ('b ⇒ ant) set, 'b set] ⇒ nat ⇒ int" where
"m_zmax_pdsI_hom K P I = (λj. tna (AMin ((ν⇘K (P j)⇙) ` I)))"
definition
m_zmax_pdsI :: "[_, nat, nat ⇒ ('b ⇒ ant) set, 'b set] ⇒ int" where
"m_zmax_pdsI K n P I = (m_zmax n (m_zmax_pdsI_hom K P I)) + 1"
lemma (in Corps) value_Zl_mI_pos:"⟦0 < n; distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; I ≠ carrier (O⇘K P n⇙); j ≤ n; l ≤ n⟧ ⟹
0 ≤ ((ν⇘K (P j)⇙) (Zl_mI K P I l))"
apply (frule value_Zl_mI[of "n" "P" "I" "l"], assumption+)
apply (erule conjE)
apply (frule ring_n_pd[of "n" "P"])
apply (frule Ring.ideal_subset[of "O⇘K P n⇙" "I" "Zl_mI K P I l"], assumption+)
apply (thin_tac "ideal (O⇘K P n⇙) I")
apply (thin_tac "I ≠ {𝟬⇘O⇘K P n⇙⇙}")
apply (thin_tac "I ≠ carrier (O⇘K P n⇙)")
apply (thin_tac "Ring (O⇘K P n⇙)")
apply (simp add:ring_n_pd_def Sr_def)
done
lemma (in Corps) value_mI_genTr1:"⟦0 < n; distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘O⇘K P n⇙⇙}; I ≠ carrier (O⇘K P n⇙); j ≤ n⟧ ⟹
(mprod_exp K (K_gamma j) (Kb⇘K n P⇙) n)⇘K⇙⇗(m_zmax_pdsI K n P I)⇖ ∈ carrier K"
apply (frule K_gamma_hom[of "j" "n"])
apply (frule mprod_mem[of n "K_gamma j" "Kb⇘K n P⇙"])
apply (rule Kbase_hom1, assumption+)
apply (rule npowf_mem)
apply simp+
done
lemma (in Corps) value_mI_genTr1_0:"⟦0 < n; distinct_pds K n P;
ideal (O⇘K P n⇙) I; I ≠ {𝟬⇘O⇘K P n⇙⇙}; I ≠ carrier (O⇘K P n⇙); j ≤ n⟧
⟹ (mprod_exp K (K_gamma j) (Kb⇘K n P⇙) n) ∈ carrier K"
apply (frule K_gamma_hom[of "j" "n"])
apply (frule mprod_mem[of n "K_gamma j" "Kb⇘K n P⇙"])
apply (rule Kbase_hom1, assumption+)
apply simp
done
lemma (in Corps) value_mI_genTr2:"⟦0 < n; distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘O⇘K P n⇙⇙}; I ≠ carrier (O⇘K P n⇙); j ≤ n⟧ ⟹
(mprod_exp K (K_gamma j) (Kb⇘K n P⇙) n)⇘K⇙⇗(m_zmax_pdsI K n P I)⇖ ≠ 𝟬"
apply (frule K_gamma_hom[of "j" "n"])
apply (frule mprod_mem[of n "K_gamma j" "Kb⇘K n P⇙"])
apply (rule Kbase_hom1, assumption+) apply simp apply (erule conjE)
apply (simp add: field_potent_nonzero1)
done
lemma (in Corps) value_mI_genTr3:"⟦0 < n; distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘O⇘K P n⇙⇙}; I ≠ carrier (O⇘K P n⇙); j ≤ n⟧ ⟹
(Zl_mI K P I j) ⋅⇩r ((mprod_exp K (K_gamma j) (Kb⇘K n P⇙) n)⇘K⇙⇗(m_zmax_pdsI K n P I)⇖)
∈ carrier K"
apply (cut_tac field_is_ring)
apply (rule Ring.ring_tOp_closed, assumption+)
apply (simp add:Zl_mI_mem_K)
apply (simp add:value_mI_genTr1)
done
lemma (in Corps) value_mI_gen:"⟦0 < n; distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; I ≠ carrier (O⇘K P n⇙); j ≤ n⟧ ⟹
(ν⇘K (P j)⇙) (nsum K (λk. ((Zl_mI K P I k) ⋅⇩r ((mprod_exp K (λl. (γ⇘k l⇙)) (Kb⇘K n P⇙) n)⇘K⇙⇗(m_zmax_pdsI K n P I)⇖))) n) = LI K (ν⇘K (P j)⇙) I"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (case_tac "j = n", simp)
apply (cut_tac nsum_suc[of K "λk. Zl_mI K P I k ⋅⇩r
mprod_exp K (K_gamma k) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖" "n - Suc 0"],
simp,
thin_tac "Σ⇩e K (λk. Zl_mI K P I k ⋅⇩r
mprod_exp K (K_gamma k) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖) n =
Σ⇩e K (λk. Zl_mI K P I k ⋅⇩r
mprod_exp K (K_gamma k) (Kb⇘K n P⇙)
n⇘K⇙⇗m_zmax_pdsI K n P I⇖) (n - Suc 0) ±
Zl_mI K P I n ⋅⇩r
mprod_exp K (K_gamma n) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖")
apply (cut_tac distinct_pds_valuation[of "n" "n - Suc 0" "P"])
prefer 2 apply simp
prefer 2 apply simp
apply (subst value_less_eq1[THEN sym, of "ν⇘K (P n)⇙"
"(Zl_mI K P I n)⋅⇩r (mprod_exp K (K_gamma n) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖)"
"nsum K (λk.(Zl_mI K P I k)⋅⇩r (mprod_exp K (K_gamma k) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖)) (n - Suc 0)"], assumption+)
apply (simp add:value_mI_genTr3)
apply (frule Ring.ring_is_ag[of K])
apply (rule aGroup.nsum_mem[of _ "n - Suc 0"], assumption+)
apply (rule allI, rule impI)
apply (simp add:value_mI_genTr3)
apply (subst val_t2p[of "ν⇘K (P n)⇙"], assumption+)
apply (simp add:Zl_mI_mem_K)
apply (simp add:value_mI_genTr1)
apply (simp add:mgenerator2Tr3_1[of "n" "n" "n" "P"])
apply (simp add:aadd_0_r)
apply (frule value_Zl_mI[of "n" "P" "I" "n"], assumption+, simp)
apply (erule conjE)
apply (frule_tac f = "λk. (Zl_mI K P I k) ⋅⇩r
(mprod_exp K (K_gamma k) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖)" in
value_ge_add[of "ν⇘K (P n)⇙" "n - Suc 0" _
"ant (m_zmax_pdsI K n P I)"])
apply (rule allI, rule impI)
apply (rule Ring.ring_tOp_closed, assumption+)
apply (simp add:Zl_mI_mem_K)
apply (simp add:value_mI_genTr1)
apply (rule allI, rule impI) apply (simp add:cmp_def)
apply (subst val_t2p [where v="ν⇘K P n⇙"], assumption+)
apply (simp add:Zl_mI_mem_K)
apply (simp add:value_mI_genTr1)
apply (cut_tac e = "K_gamma ja" in mprod_mem[of n _ "Kb⇘K n P⇙"])
apply (simp add:Zset_def) apply (rule Kbase_hom1, assumption+)
apply (subst val_exp[of "ν⇘K (P n)⇙", THEN sym], assumption+)
apply simp+
apply (subst mgenerator2Tr1[of "n" "n" _ "P"], assumption+, simp, simp,
assumption+)
apply (simp add:K_gamma_def Kronecker_delta_def)
apply (frule_tac l = ja in value_Zl_mI_pos[of "n" "P" "I" "n"],
assumption+, simp, simp)
apply (simp add:Nset_preTr1)
apply (frule_tac y = "(ν⇘K (P n)⇙) (Zl_mI K P I ja)" in
aadd_le_mono[of "0" _ "ant (m_zmax_pdsI K n P I)"]) apply (simp add:aadd_0_l)
apply (subgoal_tac "LI K (ν⇘K (P n)⇙) I < ant (m_zmax_pdsI K n P I)")
apply simp
apply (rule aless_le_trans[of "LI K (ν⇘K (P n)⇙) I"
"ant (m_zmax_pdsI K n P I)"])
apply (simp add:m_zmax_pdsI_def)
apply (cut_tac aless_zless[of "tna (LI K (ν⇘K (P n)⇙) I)"
"m_zmax n (m_zmax_pdsI_hom K P I) + 1"])
apply (frule val_LI_noninf[of "n" "P" "I" "n"], assumption+, simp, simp)
apply (frule val_LI_pos[of "n" "P" "I" "n"], assumption+, simp,
frule apos_neq_minf[of "LI K (ν⇘K (P n)⇙) I"], simp add:ant_tna)
apply (subst m_zmax_pdsI_hom_def)
apply (subst LI_def)
apply (cut_tac m_zmax_gt_each[of n "λu.(tna (AMin ((ν⇘K (P u)⇙) ` I)))"])
apply simp
apply (rule allI, rule impI)
apply (simp add:Zset_def, simp)
apply (subst val_t2p[of "ν⇘K (P n)⇙"], assumption+)
apply (rule Zl_mI_mem_K, assumption+, simp)
apply (simp add:value_mI_genTr1)
apply (simp add:mgenerator2Tr3_1[of "n" "n" "n" "P" "m_zmax_pdsI K n P I"])
apply (simp add:aadd_0_r)
apply (simp add:value_Zl_mI[of "n" "P" "I" "n"])
apply (frule aGroup.addition3[of "K" "n - Suc 0" "λk. (Zl_mI K P I k) ⋅⇩r
((mprod_exp K (K_gamma k) (Kb⇘K n P⇙) n)⇘K⇙⇗(m_zmax_pdsI K n P I)⇖)" "j"])
apply simp
apply (rule allI, rule impI)
apply (simp add:value_mI_genTr3) apply simp+
apply (thin_tac "Σ⇩e K (λk. Zl_mI K P I k ⋅⇩r
mprod_exp K (K_gamma k) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖) n =
Σ⇩e K (cmp (λk. Zl_mI K P I k ⋅⇩r
mprod_exp K (K_gamma k) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖) (τ⇘j n⇙)) n")
apply (cut_tac nsum_suc[of K "cmp (λk. Zl_mI K P I k ⋅⇩r
mprod_exp K (K_gamma k) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖) (τ⇘j n⇙)" "n - Suc 0"])
apply (simp del:nsum_suc) apply (
thin_tac "Σ⇩e K (cmp (λk. Zl_mI K P I k ⋅⇩r
mprod_exp K (K_gamma k) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖) (τ⇘j n⇙)) n =
Σ⇩e K (cmp (λk. Zl_mI K P I k ⋅⇩r
mprod_exp K (K_gamma k) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖) (τ⇘j n⇙))
(n - Suc 0) ± (cmp (λk. Zl_mI K P I k ⋅⇩r
mprod_exp K (K_gamma k) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖) (τ⇘j n⇙)) n")
apply (cut_tac distinct_pds_valuation[of "j" "n - Suc 0" "P"])
prefer 2 apply simp prefer 2 apply simp
apply (simp add:cmp_def)
apply (cut_tac n_in_Nsetn[of "n"])
apply (simp add:transpos_ij_2)
apply (subst value_less_eq1[THEN sym, of "ν⇘K (P j)⇙"
"(Zl_mI K P I j) ⋅⇩r (mprod_exp K (K_gamma j) (Kb⇘K n P⇙)
n⇘K⇙⇗m_zmax_pdsI K n P I⇖)" "Σ⇩e K (λx.(Zl_mI K P I ((τ⇘j n⇙) x)) ⋅⇩r
(mprod_exp K (K_gamma ((τ⇘j n⇙) x)) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖)) (n - Suc 0)"], assumption+)
apply (simp add:value_mI_genTr3)
apply (rule aGroup.nsum_mem[of "K" "n - Suc 0"], assumption+)
apply (rule allI, rule impI)
apply (frule_tac l = ja in transpos_mem[of "j" "n" "n"], simp+)
apply (simp add:value_mI_genTr3)
apply (subst val_t2p[of "ν⇘K (P j)⇙"], assumption+)
apply (simp add:Zl_mI_mem_K)
apply (simp add:value_mI_genTr1)
apply (simp add:mgenerator2Tr3_1[of "n" "j" "j" "P"])
apply (frule value_Zl_mI[of "n" "P" "I" "j"], assumption+)
apply (erule conjE)
apply (simp add:aadd_0_r)
apply (cut_tac f = "λx. (Zl_mI K P I ((τ⇘j n⇙) x)) ⋅⇩r
(mprod_exp K (K_gamma ((τ⇘j n⇙) x)) (Kb⇘K n P⇙) n⇘K⇙⇗m_zmax_pdsI K n P I⇖)" in
value_ge_add[of "ν⇘K (P j)⇙"
"n - Suc 0" _ "ant (m_zmax_pdsI K n P I)"], assumption+)
apply (rule allI, rule impI)
apply (frule_tac l = ja in transpos_mem[of "j" "n" "n"], simp+)
apply (simp add:value_mI_genTr3)
apply (rule allI, rule impI) apply (simp add:cmp_def)
apply (frule_tac l = ja in transpos_mem[of "j" "n" "n"], simp+)
apply (subst val_t2p [where v="ν⇘K P j⇙"], assumption+)
apply (simp add:Zl_mI_mem_K)
apply (simp add:value_mI_genTr1)
apply (cut_tac k = ja in transpos_noteqTr[of "n" _ "j"], simp+)
apply (subst mgenerator2Tr3_2[of "n" "j" _ "P"], simp+)
apply (cut_tac l = "(τ⇘j n⇙) ja" in value_Zl_mI_pos[of "n" "P" "I" "j"],
simp+)
apply (frule_tac y = "(ν⇘K (P j)⇙) (Zl_mI K P I ((τ⇘j n⇙) ja))" in
aadd_le_mono[of "0" _ "ant (m_zmax_pdsI K n P I)"])
apply (simp add:aadd_0_l)
apply (subgoal_tac "LI K (ν⇘K (P j)⇙) I < ant (m_zmax_pdsI K n P I)")
apply (rule aless_le_trans[of "LI K (ν⇘K (P j)⇙) I"
"ant (m_zmax_pdsI K n P I)"], assumption+)
apply (simp add:m_zmax_pdsI_def)
apply (cut_tac aless_zless[of "tna (LI K (ν⇘K (P j)⇙) I)"
"m_zmax n (m_zmax_pdsI_hom K P I) + 1"])
apply (frule val_LI_noninf[of "n" "P" "I" "j"], assumption+,
frule val_LI_pos[of "n" "P" "I" "j"], assumption+,
frule apos_neq_minf[of "LI K (ν⇘K (P j)⇙) I"], simp add:ant_tna)
apply (subst m_zmax_pdsI_hom_def)
apply (subst LI_def)
apply (subgoal_tac "∀h ≤ n. (λu. (tna (AMin ((ν⇘K (P u)⇙) ` I)))) h ∈ Zset")
apply (frule m_zmax_gt_each[of n "λu.(tna (AMin ((ν⇘K (P u)⇙) ` I)))"])
apply simp
apply (rule allI, rule impI)
apply (simp add:Zset_def)
apply (subst val_t2p[of "ν⇘K (P j)⇙"], assumption+)
apply (rule Zl_mI_mem_K, assumption+)
apply (simp add:value_mI_genTr1)
apply (simp add:mgenerator2Tr3_1[of "n" "j" "j" "P"
"m_zmax_pdsI K n P I"])
apply (simp add:aadd_0_r)
apply (simp add:value_Zl_mI[of "n" "P" "I" "j"])
done
lemma (in Corps) mI_gen_in_I:"⟦0 < n; distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; I ≠ carrier (O⇘K P n⇙)⟧ ⟹
(nsum K (λk. ((Zl_mI K P I k) ⋅⇩r
((mprod_exp K (λl. (γ⇘k l⇙)) (Kb⇘K n P⇙) n)⇘K⇙⇗(m_zmax_pdsI K n P I)⇖))) n) ∈ I"
apply (cut_tac field_is_ring, frule ring_n_pd[of n P])
apply (rule ideal_eSum_closed[of n P I n], assumption+)
apply (rule allI, rule impI)
apply (frule_tac j = j in value_Zl_mI[of "n" "P" "I"], assumption+)
apply (erule conjE)
apply (thin_tac "(ν⇘K (P j)⇙) (Zl_mI K P I j) = LI K (ν⇘K (P j)⇙) I")
apply (subgoal_tac "(mprod_exp K (K_gamma j) (Kb⇘K n P⇙) n)⇘K⇙⇗(m_zmax_pdsI K n P I)⇖
∈ carrier (O⇘K P n⇙)")
apply (frule_tac x = "Zl_mI K P I j" and
r = "(mprod_exp K (K_gamma j) (Kb⇘K n P⇙) n)⇘K⇙⇗(m_zmax_pdsI K n P I)⇖"
in Ring.ideal_ring_multiple1[of "(O⇘K P n⇙)" "I"], assumption+)
apply (frule_tac h = "Zl_mI K P I j" in
Ring.ideal_subset[of "O⇘K P n⇙" "I"], assumption+)
apply (simp add:ring_n_pd_tOp_K_tOp[of "n" "P"])
apply (subst ring_n_pd_def) apply (simp add:Sr_def)
apply (simp add:value_mI_genTr1)
apply (rule allI, rule impI)
apply (case_tac "j = ja")
apply (simp add:mgenerator2Tr3_1)
apply (simp add:mgenerator2Tr3_2)
apply (simp add:m_zmax_pdsI_def) apply (simp add:m_zmax_pdsI_hom_def)
apply (simp only:ant_0[THEN sym])
apply (simp add:aless_zless)
apply (subgoal_tac "∀l ≤ n. (λj. tna (AMin ((ν⇘K (P j)⇙) ` I))) l ∈ Zset")
apply (frule m_zmax_gt_each[of n "λj. tna (AMin ((ν⇘K (P j)⇙) ` I))"])
apply (rotate_tac -1, drule_tac a = ja in forall_spec, simp+)
apply (frule_tac j = ja in val_LI_pos[of "n" "P" "I"], assumption+)
apply (cut_tac j = "tna (LI K (ν⇘K (P ja)⇙) I)" in ale_zle[of "0"])
apply (frule_tac j = ja in val_LI_noninf[of "n" "P" "I"], assumption+,
frule_tac j = ja in val_LI_pos[of "n" "P" "I"], assumption+,
frule_tac a = "LI K (ν⇘K (P ja)⇙) I" in apos_neq_minf, simp add:ant_tna,
simp add:ant_0) apply (unfold LI_def)
apply (frule_tac y = "tna (AMin (ν⇘K (P ja)⇙ ` I))" and z = "m_zmax n (λj. tna (AMin (ν⇘K (P j)⇙ ` I)))" in order_trans[of "0"], assumption+)
apply (rule_tac y = "m_zmax n (λj. tna (AMin (ν⇘K (P j)⇙ ` I)))" and
z = "m_zmax n (λj. tna (AMin (ν⇘K (P j)⇙ ` I))) + 1" in order_trans[of "0"],
assumption+) apply simp
apply (rule allI, rule impI) apply (simp add:Zset_def)
done
text‹We write the element
‹eΣ K (λk. (Zl_mI K P I k) ⋅⇩K ((mprod_exp K (K_gamma k) (Kb⇘K n P⇙)
n)⇩K⇧(m_zmax_pdsI K n P I))) n›
as ‹mIg⇘K G a i n P I⇙››
definition
mIg :: "[_, nat, nat ⇒ ('b ⇒ ant) set,
'b set] ⇒ 'b" ("(4mIg⇘ _ _ _ _⇙)" [82,82,82,83]82) where
"mIg⇘K n P I⇙ = Σ⇩e K (λk. (Zl_mI K P I k) ⋅⇩r⇘K⇙
((mprod_exp K (K_gamma k) (Kb⇘K n P⇙) n)⇘K⇙⇗(m_zmax_pdsI K n P I)⇖)) n"
text‹We can rewrite above two lemmas by using ‹mIg⇘K G a i n P I⇙››
lemma (in Corps) value_mI_gen1:"⟦0 < n; distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; I ≠ carrier (O⇘K P n⇙)⟧ ⟹
∀j ≤ n.(ν⇘K (P j)⇙) (mIg⇘K n P I⇙) = LI K (ν⇘K (P j)⇙) I"
apply (rule allI, rule impI)
apply (simp add:mIg_def value_mI_gen)
done
lemma (in Corps) mI_gen_in_I1:"⟦0 < n; distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; I ≠ carrier (O⇘K P n⇙)⟧ ⟹ (mIg⇘K n P I⇙) ∈ I"
apply (simp add:mIg_def mI_gen_in_I)
done
lemma (in Corps) mI_principalTr:"⟦0 < n; distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; I ≠ carrier (O⇘K P n⇙); x ∈ I⟧ ⟹
∀j ≤ n. ((ν⇘K (P j)⇙) (mIg⇘K n P I⇙)) ≤ ((ν⇘K (P j)⇙) x)"
apply (simp add:value_mI_gen1)
apply (rule allI, rule impI)
apply (rule Zleast_LI, assumption+)
done
lemma (in Corps) mI_principal:"⟦0 < n; distinct_pds K n P; ideal (O⇘K P n⇙) I;
I ≠ {𝟬⇘(O⇘K P n⇙)⇙}; I ≠ carrier (O⇘K P n⇙)⟧ ⟹
I = Rxa (O⇘K P n⇙) (mIg⇘K n P I⇙)"
apply (frule ring_n_pd[of "n" "P"])
apply (rule equalityI)
apply (rule subsetI)
apply (frule_tac x = x in mI_principalTr[of "n" "P" "I"],
assumption+)
apply (frule_tac y = x in n_eq_val_eq_idealTr[of "n" "P" "mIg⇘K n P I⇙"])
apply (frule mI_gen_in_I1[of "n" "P" "I"], assumption+)
apply (simp add:Ring.ideal_subset)+
apply (thin_tac "∀j≤n. (ν⇘K (P j)⇙) (mIg⇘ K n P I⇙) ≤ (ν⇘K (P j)⇙) x")
apply (frule_tac h = x in Ring.ideal_subset[of "O⇘K P n⇙" "I"], assumption+)
apply (frule_tac a = x in Ring.a_in_principal[of "O⇘K P n⇙"], assumption+)
apply (simp add:subsetD)
apply (rule Ring.ideal_cont_Rxa[of "O⇘K P n⇙" "I" "mIg⇘ K n P I⇙"], assumption+)
apply (rule mI_gen_in_I1[of "n" "P" "I"], assumption+)
done
subsection ‹‹prime_n_pd››
lemma (in Corps) prime_n_pd_principal:"⟦distinct_pds K n P; j ≤ n⟧ ⟹
(P⇘K P n⇙ j) = Rxa (O⇘K P n⇙) (((Kb⇘K n P⇙) j))"
apply (frule ring_n_pd[of "n" "P"])
apply (frule prime_n_pd_prime[of "n" "P" "j"], assumption+)
apply (simp add:prime_ideal_def, frule conjunct1)
apply (fold prime_ideal_def)
apply (thin_tac "prime_ideal (O⇘K P n⇙) (P⇘K P n⇙ j)")
apply (rule equalityI)
apply (rule subsetI)
apply (frule_tac y = x in n_eq_val_eq_idealTr[of n P "(Kb⇘K n P⇙) j"])
apply (thin_tac "Ring (O⇘K P n⇙)", thin_tac "ideal (O⇘K P n⇙) (P⇘K P n⇙ j)")
apply (simp add:ring_n_pd_def Sr_def)
apply (frule Kbase_hom[of "n" "P"], simp)
apply (rule allI, rule impI)
apply (frule Kbase_Kronecker[of "n" "P"])
apply (simp add:Kronecker_delta_def, rule impI)
apply (simp only:ant_0[THEN sym], simp only:ant_1[THEN sym])
apply (simp del:ant_1)
apply (simp add:prime_n_pd_def)
apply (rule allI, rule impI)
apply (frule Kbase_Kronecker[of "n" "P"])
apply simp
apply (thin_tac "∀j≤n. ∀l≤n. (ν⇘K (P j)⇙) ((Kb⇘K n P⇙) l) = δ⇘j l⇙")
apply (case_tac "ja = j", simp add:Kronecker_delta_def)
apply (thin_tac "ideal (O⇘K P n⇙) (P⇘K P n⇙ j)")
apply (simp add:prime_n_pd_def, erule conjE)
apply (frule_tac x = x in mem_ring_n_pd_mem_K[of "n" "P"],
assumption+)
apply (case_tac "x = 𝟬⇘K⇙")
apply (frule distinct_pds_valuation2[of "j" "n" "P"], assumption+)
apply (rule gt_a0_ge_1, assumption)+
apply (simp add:Kronecker_delta_def)
apply (frule_tac j = ja in distinct_pds_valuation2[of _ "n" "P"],
assumption+)
apply (simp add:prime_n_pd_def, erule conjE)
apply (thin_tac "ideal (O⇘K P n⇙) {x. x ∈ carrier (O⇘K P n⇙) ∧ 0 < (ν⇘K (P j)⇙) x}")
apply (simp add:ring_n_pd_def Sr_def)
apply (cut_tac h = x in Ring.ideal_subset[of "O⇘K P n⇙" "P⇘K P n⇙ j"])
apply (frule_tac a = x in Ring.a_in_principal[of "O⇘K P n⇙"])
apply (simp add:Ring.ideal_subset, assumption+)
apply (rule_tac c = x and A = "(O⇘K P n⇙) ♢⇩p x" and B = "(O⇘K P n⇙) ♢⇩p (Kb⇘K n P⇙) j"
in subsetD, assumption+)
apply (simp add:Ring.a_in_principal)
apply (rule Ring.ideal_cont_Rxa[of "O⇘K P n⇙" "P⇘K P n⇙ j" "(Kb⇘K n P⇙) j"], assumption+)
apply (subst prime_n_pd_def, simp)
apply (frule Kbase_Kronecker[of "n" "P"])
apply (simp add:Kronecker_delta_def)
apply (simp only:ant_1[THEN sym], simp only:ant_0[THEN sym])
apply (simp del:ant_1 add:aless_zless)
apply (subst ring_n_pd_def, simp add:Sr_def)
apply (frule Kbase_hom[of "n" "P"])
apply simp
apply (rule allI)
apply (simp add:ant_0)
apply (rule impI)
apply (simp only:ant_1[THEN sym], simp only:ant_0[THEN sym])
apply (simp del:ant_1)
done
lemma (in Corps) ring_n_prod_primesTr:"⟦0 < n; distinct_pds K n P;
ideal (O⇘K P n⇙) I; I ≠ {𝟬⇘O⇘K P n⇙⇙}; I ≠ carrier (O⇘K P n⇙)⟧ ⟹
∀j ≤ n.(ν⇘K (P j)⇙) (mprod_exp K (mL K P I) (Kb⇘K n P⇙) n) =
(ν⇘K (P j)⇙) (mIg⇘K n P I⇙)"
apply (rule allI, rule impI)
apply (simp add:mgenerator1)
apply (simp add:value_mI_gen1)
apply (simp add:value_Zl_mI)
done
lemma (in Corps) ring_n_prod_primesTr1:"⟦0 < n; distinct_pds K n P;
ideal (O⇘K P n⇙) I; I ≠ {𝟬⇘O⇘K P n⇙⇙}; I ≠ carrier (O⇘K P n⇙)⟧ ⟹
I = (O⇘K P n⇙) ♢⇩p (mprod_exp K (mL K P I) (Kb⇘K n P⇙) n)"
apply (frule ring_n_pd[of "n" "P"])
apply (subst n_eq_val_eq_ideal[of "n" "P" "mprod_exp K (mL K P I)
(Kb⇘K n P⇙) n" "mIg⇘K n P I⇙"], assumption+)
apply (simp add:mgeneratorTr4)
apply (frule mI_gen_in_I1[of "n" "P" "I"], assumption+)
apply (simp add:Ring.ideal_subset)
apply (simp add:ring_n_prod_primesTr)
apply (simp add:mI_principal)
done
lemma (in Corps) ring_n_prod_primes:"⟦0 < n; distinct_pds K n P;
ideal (O⇘K P n⇙) I; I ≠ {𝟬⇘O⇘K P n⇙⇙}; I ≠ carrier (O⇘K P n⇙);
∀k ≤ n. J k = (P⇘K P n⇙ k)⇗♢(O⇘K P n⇙) (nat ((mL K P I) k))⇖⟧ ⟹
I = iΠ⇘(O⇘K P n⇙),n⇙ J"
apply (simp add:prime_n_pd_principal[of "n" "P"])
apply (subst ring_n_prod_primesTr1[of "n" "P" "I"], assumption+)
apply (frule ring_n_pd[of "n" "P"])
apply (frule Ring.prod_n_principal_ideal[of "O⇘K P n⇙" "nat o (mL K P I)" "n"
"Kb⇘K n P⇙" "J"])
apply (frule Kbase_hom[of "n" "P"])
apply (simp add:nat_def)
apply (subst ring_n_pd_def) apply (simp add:Sr_def)
apply (rule Pi_I, simp)
apply (simp add:Kbase_Kronecker[of "n" "P"])
apply (simp add:Kronecker_delta_def)
apply (simp only:ant_1[THEN sym], simp only:ant_0[THEN sym])
apply (simp del:ant_1)
apply (simp add:Kbase_hom) apply simp
apply simp
apply (frule ring_n_mprod_mprodR[of "n" "P" n "mL K P I" "Kb⇘K n P⇙"])
apply (rule allI, rule impI, simp add:Zset_def)
apply (rule allI, rule impI)
apply (simp add: Zleast_in_mI_pos)
apply (rule allI, rule impI)
apply (subst ring_n_pd_def) apply (simp add:Sr_def)
apply (frule Kbase_hom1[of "n" "P"], simp)
apply (simp add:zero_in_ring_n_pd_zero_K)
apply (frule Kbase_Kronecker[of "n" "P"])
apply (simp add:Kronecker_delta_def)
apply (simp only:ant_1[THEN sym], simp only:ant_0[THEN sym])
apply (simp del:ant_1)
apply simp
done
end
Theory Valuation3
theory Valuation3
imports Valuation2
begin
section "Completion"
text‹In this section we formalize "completion" of the ground field K›
definition
limit :: "[_, 'b ⇒ ant, nat ⇒ 'b, 'b]
⇒ bool" ("(4lim⇘ _ _ ⇙_ _)" [90,90,90,91]90) where
"lim⇘K v⇙ f b ⟷ (∀N. ∃M. (∀n. M < n ⟶
((f n) ±⇘K⇙ (-⇩a⇘K⇙ b)) ∈ (vp K v)⇗ (Vr K v) (an N)⇖))"
lemma not_in_singleton_noneq:"x ∉ {a} ⟹ x ≠ a"
apply simp
done
lemma noneq_not_in_singleton:"x ≠ a ⟹ x ∉ {a}"
apply simp
done
lemma inf_neq_1[simp]:"∞ ≠ 1"
by (simp only:ant_1[THEN sym], rule z_neq_inf[THEN not_sym, of 1])
lemma a1_neq_0[simp]:"(1::ant) ≠ 0"
by (simp only:an_1[THEN sym], simp only:an_0[THEN sym],
subst aneq_natneq[of 1 0], simp)
lemma a1_poss[simp]:"(0::ant) < 1"
by (cut_tac zposs_aposss[of 1], simp)
lemma a_p1_gt[simp]:"⟦a ≠ ∞; a ≠ -∞⟧ ⟹ a < a + 1"
apply (cut_tac aadd_poss_less[of a 1],
simp add:aadd_commute, assumption+)
apply simp
done
lemma (in Corps) vpr_pow_inter_zero:"valuation K v ⟹
(⋂ {I. ∃n. I = (vp K v)⇗(Vr K v) (an n)⇖}) = {𝟬}"
apply (frule Vr_ring[of v], frule vp_ideal[of v])
apply (rule equalityI)
defer
apply (rule subsetI)
apply simp
apply (rule allI, rule impI, erule exE, simp)
apply (cut_tac n = "an n" in vp_apow_ideal[of v], assumption+)
apply simp
apply (cut_tac I = "(vp K v)⇗ (Vr K v) (an n)⇖" in Ring.ideal_zero[of "Vr K v"],
assumption+)
apply (simp add:Vr_0_f_0)
apply (rule subsetI, simp)
apply (rule contrapos_pp, simp+)
apply (subgoal_tac "x ∈ vp K v")
prefer 2
apply (drule_tac x = "vp K v⇗ (Vr K v) (an 1)⇖" in spec)
apply (subgoal_tac "∃n. vp K v⇗ (Vr K v) (an (Suc 0))⇖ = vp K v⇗ (Vr K v) (an n)⇖",
simp,
thin_tac " ∃n. vp K v⇗ (Vr K v) (an (Suc 0))⇖ = vp K v⇗ (Vr K v) (an n)⇖")
apply (simp add:r_apow_def an_def)
apply (simp only:na_1)
apply (simp only:Ring.idealpow_1_self[of "Vr K v" "vp K v"])
apply blast
apply (frule n_val_valuation[of v])
apply (frule_tac x = x in val_nonzero_z[of "n_val K v"],
frule_tac h = x in Ring.ideal_subset[of "Vr K v" "vp K v"],
assumption+,
simp add:Vr_mem_f_mem, assumption+) apply (
frule_tac h = x in Ring.ideal_subset[of "Vr K v" "vp K v"],
simp add:Vr_mem_f_mem, assumption+)
apply (cut_tac x = x in val_pos_mem_Vr[of v], assumption) apply(
simp add:Vr_mem_f_mem, simp)
apply (frule_tac x = x in val_pos_n_val_pos[of v],
simp add:Vr_mem_f_mem, simp)
apply (cut_tac x = "n_val K v x" and y = 1 in aadd_pos_poss, assumption+,
simp) apply (frule_tac y = "n_val K v x + 1" in aless_imp_le[of 0])
apply (cut_tac x1 = x and n1 = "(n_val K v x) + 1" in n_val_n_pow[THEN sym,
of v], assumption+)
apply (drule_tac a = "vp K v⇗ (Vr K v) (n_val K v x + 1)⇖" in forall_spec)
apply (erule exE, simp)
apply (simp only:ant_1[THEN sym] a_zpz,
cut_tac z = "z + 1" in z_neq_inf)
apply (subst an_na[THEN sym], assumption+, blast)
apply simp
apply (cut_tac a = "n_val K v x" in a_p1_gt)
apply (erule exE, simp only:ant_1[THEN sym], simp only:a_zpz z_neq_inf)
apply (cut_tac i = "z + 1" and j = z in ale_zle, simp)
apply (erule exE, simp add:z_neq_minf)
apply (cut_tac y1 = "n_val K v x" and x1 = "n_val K v x + 1" in
aneg_le[THEN sym], simp)
done
lemma (in Corps) limit_diff_n_val:"⟦b ∈ carrier K; ∀j. f j ∈ carrier K;
valuation K v⟧ ⟹ (lim⇘K v⇙ f b) = (∀N. ∃M. ∀n. M < n ⟶
(an N) ≤ (n_val K v ((f n) ± (-⇩a b))))"
apply (rule iffI)
apply (rule allI)
apply (simp add:limit_def) apply (rotate_tac -1)
apply (drule_tac x = N in spec)
apply (erule exE)
apply (subgoal_tac "∀n>M. (an N) ≤ (n_val K v (f n ± (-⇩a b)))")
apply blast
apply (rule allI, rule impI) apply (rotate_tac -2)
apply (drule_tac x = n in spec, simp)
apply (rule n_value_x_1[of v], assumption+,
simp add:an_nat_pos, assumption)
apply (simp add:limit_def)
apply (rule allI, rotate_tac -1, drule_tac x = N in spec)
apply (erule exE)
apply (subgoal_tac "∀n>M. f n ± (-⇩a b) ∈ vp K v ⇗(Vr K v) (an N)⇖")
apply blast
apply (rule allI, rule impI)
apply (rotate_tac -2, drule_tac x = n in spec, simp)
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (rule_tac x = "f n ± -⇩a b" and n = "an N" in n_value_x_2[of "v"],
assumption+)
apply (subst val_pos_mem_Vr[THEN sym, of "v"], assumption+)
apply (drule_tac x = n in spec)
apply (rule aGroup.ag_pOp_closed[of "K"], assumption+)
apply (simp add:aGroup.ag_mOp_closed)
apply (subst val_pos_n_val_pos[of "v"], assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+) apply simp
apply (simp add:aGroup.ag_mOp_closed)
apply (rule_tac j = "an N" and k = "n_val K v ( f n ± -⇩a b)" in
ale_trans[of "0"], simp, assumption+)
apply simp
done
lemma (in Corps) an_na_Lv:"valuation K v ⟹ an (na (Lv K v)) = Lv K v"
apply (frule Lv_pos[of "v"])
apply (frule aless_imp_le[of "0" "Lv K v"])
apply (frule apos_neq_minf[of "Lv K v"])
apply (frule Lv_z[of "v"], erule exE)
apply (rule an_na)
apply (rule contrapos_pp, simp+)
done
lemma (in Corps) limit_diff_val:"⟦b ∈ carrier K; ∀j. f j ∈ carrier K;
valuation K v⟧ ⟹ (lim⇘K v⇙ f b) = (∀N. ∃M. ∀n. M < n ⟶
(an N) ≤ (v ((f n) ± (-⇩a b))))"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
simp add:limit_diff_n_val[of "b" "f" "v"])
apply (rule iffI)
apply (rule allI,
rotate_tac -1, drule_tac x = N in spec, erule exE)
apply (subgoal_tac "∀n > M. an N ≤ v( f n ± -⇩a b)", blast)
apply (rule allI, rule impI)
apply (drule_tac x = n in spec,
drule_tac x = n in spec, simp)
apply (frule aGroup.ag_mOp_closed[of "K" "b"], assumption+,
frule_tac x = "f n" and y = "-⇩a b" in aGroup.ag_pOp_closed, assumption+)
apply (frule_tac x = "f n ± -⇩a b" in n_val_le_val[of "v"],
assumption+)
apply (cut_tac n = N in an_nat_pos)
apply (frule_tac j = "an N" and k = "n_val K v ( f n ± -⇩a b)" in
ale_trans[of "0"], assumption+)
apply (subst val_pos_n_val_pos, assumption+)
apply (rule_tac i = "an N" and j = "n_val K v ( f n ± -⇩a b)" and
k = "v ( f n ± -⇩a b)" in ale_trans, assumption+)
apply (rule allI)
apply (rotate_tac 3, drule_tac x = "N * (na (Lv K v))" in spec)
apply (erule exE)
apply (subgoal_tac "∀n. M < n ⟶ (an N) ≤ n_val K v (f n ± -⇩a b)", blast)
apply (rule allI, rule impI)
apply (rotate_tac -2, drule_tac x = n in spec, simp)
apply (drule_tac x = n in spec)
apply (frule aGroup.ag_mOp_closed[of "K" "b"], assumption+,
frule_tac x = "f n" and y = "-⇩a b" in aGroup.ag_pOp_closed, assumption+)
apply (cut_tac n = "N * na (Lv K v)" in an_nat_pos)
apply (frule_tac i = 0 and j = "an (N * na (Lv K v))" and
k = "v ( f n ± -⇩a b)" in ale_trans, assumption+)
apply (simp add:amult_an_an, simp add:an_na_Lv)
apply (frule Lv_pos[of "v"])
apply (frule_tac x1 = "f n ± -⇩a b" in n_val[THEN sym, of v],
assumption+, simp)
apply (frule Lv_z[of v], erule exE, simp)
apply (simp add:amult_pos_mono_r)
done
text‹uniqueness of the limit is derived from ‹vp_pow_inter_zero››
lemma (in Corps) limit_unique:"⟦b ∈ carrier K; ∀j. f j ∈ carrier K;
valuation K v; c ∈ carrier K; lim⇘K v⇙ f b; lim⇘K v⇙ f c⟧ ⟹ b = c"
apply (rule contrapos_pp, simp+, simp add:limit_def,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
simp add:aGroup.ag_neq_diffnonzero[of "K" "b" "c"],
frule vpr_pow_inter_zero[THEN sym, of v],
frule noneq_not_in_singleton[of "b ± -⇩a c" "𝟬"])
apply simp
apply (rotate_tac -1, erule exE, erule conjE)
apply (erule exE, simp, thin_tac "x = (vp K v)⇗(Vr K v) (an n)⇖")
apply (rotate_tac 3, drule_tac x = n in spec,
erule exE,
drule_tac x = n in spec,
erule exE)
apply (rename_tac x N M1 M2)
apply (subgoal_tac "M1 < Suc (max M1 M2)",
subgoal_tac "M2 < Suc (max M1 M2)",
drule_tac x = "Suc (max M1 M2)" in spec,
drule_tac x = "Suc (max M1 M2)" in spec,
drule_tac x = "Suc (max M1 M2)" in spec)
apply simp
apply (frule_tac n = "an N" in vp_apow_ideal[of "v"],
frule_tac x = "f (Suc (max M1 M2)) ± -⇩a b" and N = "an N" in
mem_vp_apow_mem_Vr[of "v"], simp,
frule Vr_ring[of "v"], simp, simp)
apply (frule Vr_ring[of "v"],
frule_tac I = "vp K v⇗(Vr K v) (an N)⇖" and x = "f (Suc (max M1 M2)) ± -⇩a b"
in Ring.ideal_inv1_closed[of "Vr K v"], assumption+)
apply (frule_tac I = "vp K v⇗(Vr K v) (an N)⇖" and h = "f (Suc (max M1 M2)) ± -⇩a b"
in Ring.ideal_subset[of "Vr K v"], assumption+)
apply (simp add:Vr_mOp_f_mOp,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule aGroup.ag_mOp_closed[of "K" "b"], assumption+,
simp add:aGroup.ag_p_inv, simp add:aGroup.ag_inv_inv)
apply (frule_tac I = "vp K v⇗(Vr K v) (an N)⇖" and x =
"-⇩a (f (Suc (max M1 M2))) ± b " and y = "f (Suc (max M1 M2)) ± (-⇩a c)" in
Ring.ideal_pOp_closed[of "Vr K v"], assumption+)
apply (frule_tac x = "f (Suc (max M1 M2)) ± -⇩a c" and N = "an N" in
mem_vp_apow_mem_Vr[of v], simp, assumption,
frule_tac x = "-⇩a (f (Suc (max M1 M2))) ± b" and N = "an N" in
mem_vp_apow_mem_Vr[of "v"], simp,
simp add:Vr_pOp_f_pOp, simp add:Vr_pOp_f_pOp,
frule aGroup.ag_mOp_closed[of "K" "c"], assumption+,
frule_tac x = "f (Suc (max M1 M2))" in aGroup.ag_mOp_closed[of "K"],
assumption+,
frule_tac x = "f (Suc (max M1 M2))" and y = "-⇩a c" in
aGroup.ag_pOp_closed[of "K"], assumption+)
apply (simp add:aGroup.ag_pOp_assoc[of "K" _ "b" _],
simp add:aGroup.ag_pOp_assoc[THEN sym, of "K" "b" _ "-⇩a c"],
simp add:aGroup.ag_pOp_commute[of "K" "b"],
simp add:aGroup.ag_pOp_assoc[of "K" _ "b" "-⇩a c"],
frule aGroup.ag_pOp_closed[of "K" "b" "-⇩a c"], assumption+,
simp add:aGroup.ag_pOp_assoc[THEN sym, of "K" _ _ "b ± -⇩a c"],
simp add:aGroup.ag_l_inv1, simp add:aGroup.ag_l_zero)
apply (simp add:aGroup.ag_pOp_commute[of "K" _ "b"])
apply arith apply arith
done
lemma (in Corps) limit_n_val:"⟦b ∈ carrier K; b ≠ 𝟬; valuation K v;
∀j. f j ∈ carrier K; lim⇘K v⇙ f b⟧ ⟹
∃N. (∀m. N < m ⟶ (n_val K v) (f m) = (n_val K v) b)"
apply (simp add:limit_def)
apply (frule n_val_valuation[of "v"])
apply (frule val_nonzero_z[of "n_val K v" "b"], assumption+, erule exE,
rename_tac L)
apply (rotate_tac -3, drule_tac x = "nat (abs L + 1)" in spec)
apply (erule exE, rename_tac M)
apply (subgoal_tac "∀n. M < n ⟶ n_val K v (f n) = n_val K v b", blast)
apply (rule allI, rule impI)
apply (rotate_tac -2,
drule_tac x = n in spec,
simp)
apply (frule_tac x = "f n ± -⇩a b" and n = "an (nat (¦L¦ + 1))" in
n_value_x_1[of "v"],
thin_tac "f n ± -⇩a b ∈ vp K v⇗(Vr K v) (an (nat (¦L¦ + 1)))⇖")
apply (simp add:an_def)
apply (simp add: zpos_apos [symmetric])
apply assumption
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (frule aGroup.ag_mOp_closed[of "K" "b"], assumption+)
apply (drule_tac x = n in spec,
frule_tac x = "f n" in aGroup.ag_pOp_closed[of "K" _ "-⇩a b"],
assumption+,
frule_tac x = "b" and y = "(f n) ± (-⇩a b)" in value_less_eq[of
"n_val K v"], assumption+)
apply simp
apply (rule_tac x = "ant L" and y = "an (nat (¦L¦ + 1))" and
z = "n_val K v ( f n ± -⇩a b)" in aless_le_trans)
apply (subst an_def)
apply (subst aless_zless) apply arith apply assumption+
apply (simp add:aGroup.ag_pOp_commute[of "K" "b"])
apply (simp add:aGroup.ag_pOp_assoc) apply (simp add:aGroup.ag_l_inv1)
apply (simp add:aGroup.ag_r_zero)
done
lemma (in Corps) limit_val:"⟦b ∈ carrier K; b ≠ 𝟬; ∀j. f j ∈ carrier K;
valuation K v; lim⇘K v⇙ f b⟧ ⟹ ∃N. (∀n. N < n ⟶ v (f n) = v b)"
apply (frule limit_n_val[of "b" "v" "f"], assumption+)
apply (erule exE)
apply (subgoal_tac "∀m. N < m ⟶ v (f m) = v b")
apply blast
apply (rule allI, rule impI)
apply (drule_tac x = m in spec)
apply (drule_tac x = m in spec)
apply simp
apply (frule Lv_pos[of "v"])
apply (simp add:n_val[THEN sym, of "v"])
done
lemma (in Corps) limit_val_infinity:"⟦valuation K v; ∀j. f j ∈ carrier K;
lim⇘K v⇙ f 𝟬⟧ ⟹ ∀N.(∃M. (∀m. M < m ⟶ (an N) ≤ (n_val K v (f m))))"
apply (simp add:limit_def)
apply (rule allI)
apply (drule_tac x = N in spec,
erule exE)
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
simp only:aGroup.ag_inv_zero[of "K"], simp only:aGroup.ag_r_zero)
apply (subgoal_tac "∀n. M < n ⟶ an N ≤ n_val K v (f n)", blast)
apply (rule allI, rule impI)
apply (drule_tac x = n in spec,
drule_tac x = n in spec, simp)
apply (simp add:n_value_x_1)
done
lemma (in Corps) not_limit_zero:"⟦valuation K v; ∀j. f j ∈ carrier K;
¬ (lim⇘K v⇙ f 𝟬)⟧ ⟹ ∃N.(∀M. (∃m. (M < m) ∧
((n_val K v) (f m)) < (an N)))"
apply (simp add:limit_def)
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (simp add:aGroup.ag_inv_zero aGroup.ag_r_zero)
apply (erule exE)
apply (case_tac "N = 0", simp add:r_apow_def)
apply (subgoal_tac "∀M. ∃n. M < n ∧ n_val K v (f n) < (an 0)") apply blast
apply (rule allI,
rotate_tac 4, frule_tac x = M in spec,
erule exE, erule conjE)
apply (frule_tac x1 = "f n" in val_pos_mem_Vr[THEN sym, of "v"]) apply simp
apply simp
apply (frule_tac x = "f n" in val_pos_n_val_pos[of "v"])
apply simp apply simp apply (thin_tac "¬ 0 ≤ v (f n)")
apply (simp add:aneg_le) apply blast
apply (simp)
apply (subgoal_tac "∀n. ((f n) ∈ vp K v⇗ (Vr K v) (an N)⇖) =
((an N) ≤ n_val K v (f n))")
apply simp
apply (thin_tac "∀n. (f n ∈ vp K v⇗ (Vr K v) (an N)⇖) = (an N ≤ n_val K v (f n))")
apply (simp add:aneg_le) apply blast
apply (rule allI)
apply (thin_tac "∀M. ∃n. M < n ∧ f n ∉ vp K v⇗ (Vr K v) (an N)⇖")
apply (rule iffI)
apply (frule_tac x1 = "f n" and n1 = "an N" in n_val_n_pow[THEN sym, of v])
apply (rule_tac N = "an N" and x = "f n" in mem_vp_apow_mem_Vr[of v],
assumption+, simp, assumption, simp, simp)
apply (frule_tac x = "f n" and n = "an N" in n_val_n_pow[of "v"])
apply (frule_tac x1 = "f n" in val_pos_mem_Vr[THEN sym, of "v"])
apply simp
apply (cut_tac n = N in an_nat_pos)
apply (frule_tac j = "an N" and k = "n_val K v (f n)" in ale_trans[of "0"],
assumption+)
apply (frule_tac x1 = "f n" in val_pos_n_val_pos[THEN sym, of "v"])
apply simp+
done
lemma (in Corps) limit_p:"⟦valuation K v; ∀j. f j ∈ carrier K;
∀j. g j ∈ carrier K; b ∈ carrier K; c ∈ carrier K; lim⇘K v⇙ f b; lim⇘K v⇙ g c⟧
⟹ lim⇘K v⇙ (λj. (f j) ± (g j)) (b ± c)"
apply (simp add:limit_def)
apply (rule allI) apply (rotate_tac 3,
drule_tac x = N in spec,
drule_tac x = N in spec,
(erule exE)+)
apply (frule_tac x = M and y = Ma in two_inequalities, simp,
subgoal_tac "∀n > (max M Ma). (f n) ± (g n) ± -⇩a (b ± c)
∈ (vp K v)⇗(Vr K v) (an N)⇖")
apply (thin_tac "∀n. Ma < n ⟶
g n ± -⇩a c ∈ (vp K v)⇗(Vr K v) (an N)⇖",
thin_tac "∀n. M < n ⟶
f n ± -⇩a b ∈(vp K v)⇗(Vr K v) (an N)⇖", blast)
apply (frule Vr_ring[of v],
frule_tac n = "an N" in vp_apow_ideal[of v])
apply simp
apply (rule allI, rule impI)
apply (thin_tac "∀n>M. f n ± -⇩a b ∈ vp K v⇗ (Vr K v) (an N)⇖",
thin_tac "∀n>Ma. g n ± -⇩a c ∈ vp K v⇗ (Vr K v) (an N)⇖",
frule_tac I = "vp K v⇗(Vr K v) (an N)⇖" and x = "f n ± -⇩a b"
and y = "g n ± -⇩a c" in Ring.ideal_pOp_closed[of "Vr K v"],
assumption+, simp, simp)
apply (frule_tac I = "vp K v⇗(Vr K v) (an N)⇖" and h = "f n ± -⇩a b"
in Ring.ideal_subset[of "Vr K v"], assumption+, simp,
frule_tac I = "vp K v⇗(Vr K v) (an N)⇖" and h = "g n ± -⇩a c" in
Ring.ideal_subset[of "Vr K v"], assumption+, simp)
apply (simp add:Vr_pOp_f_pOp)
apply (thin_tac "f n ± -⇩a b ∈ carrier (Vr K v)",
thin_tac "g n ± -⇩a c ∈ carrier (Vr K v)")
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule aGroup.ag_mOp_closed[of "K" "b"], assumption+,
frule aGroup.ag_mOp_closed[of "K" "c"], assumption+,
frule_tac a = "f n" and b = "-⇩a b" and c = "g n" and d = "-⇩a c" in
aGroup.ag_add4_rel[of "K"], simp+)
apply (simp add:aGroup.ag_p_inv[THEN sym])
done
lemma (in Corps) Abs_ant_abs[simp]:"Abs (ant z) = ant (abs z)"
apply (simp add:Abs_def, simp add:aminus)
apply (simp only:ant_0[THEN sym], simp only:aless_zless)
apply (simp add:zabs_def)
done
lemma (in Corps) limit_t_nonzero:"⟦valuation K v; ∀(j::nat). (f j) ∈ carrier K; ∀(j::nat). g j ∈ carrier K; b ∈ carrier K; c ∈ carrier K; b ≠ 𝟬; c ≠ 𝟬;
lim⇘K v⇙ f b; lim⇘K v⇙ g c⟧ ⟹ lim⇘K v⇙ (λj. (f j) ⋅⇩r (g j)) (b ⋅⇩r c)"
apply (cut_tac field_is_ring, simp add:limit_def, rule allI)
apply (subgoal_tac "∀j. (f j) ⋅⇩r (g j) ± -⇩a (b ⋅⇩r c) =
((f j) ⋅⇩r (g j) ± (f j) ⋅⇩r (-⇩a c)) ± ((f j) ⋅⇩r c ± -⇩a (b ⋅⇩r c))", simp,
thin_tac "∀j. f j ⋅⇩r g j ± -⇩a b ⋅⇩r c =
f j ⋅⇩r g j ± f j ⋅⇩r (-⇩a c) ± (f j ⋅⇩r c ± -⇩a b ⋅⇩r c)")
apply (frule limit_n_val[of "b" "v" "f"], assumption+,
simp add:limit_def)
apply (frule n_val_valuation[of "v"])
apply (frule val_nonzero_z[of "n_val K v" "b"], assumption+,
rotate_tac -1, erule exE,
frule val_nonzero_z[of "n_val K v" "c"], assumption+,
rotate_tac -1, erule exE, rename_tac N bz cz)
apply (rotate_tac 5,
drule_tac x = "N + nat (abs cz)" in spec,
drule_tac x = "N + nat (abs bz)" in spec)
apply (erule exE)+
apply (rename_tac N bz cz M M1 M2)
apply (subgoal_tac "∀n. (max (max M1 M2) M) < n ⟶
(f n) ⋅⇩r (g n) ± (f n) ⋅⇩r (-⇩a c) ± ((f n) ⋅⇩r c ± (-⇩a (b ⋅⇩r c)))
∈ vp K v ⇗(Vr K v) (an N)⇖", blast)
apply (rule allI, rule impI) apply (simp, (erule conjE)+)
apply (rotate_tac 11, drule_tac x = n in spec,
drule_tac x = n in spec, simp,
drule_tac x = n in spec, simp)
apply (frule_tac b = "g n ± -⇩a c" and n = "an N" and x = "f n" in
convergenceTr1[of v])
apply simp apply simp apply (simp add:an_def a_zpz[THEN sym]) apply simp
apply (frule_tac b = "f n ± -⇩a b" and n = "an N" in convergenceTr1[of
"v" "c"], assumption+, simp) apply (simp add:an_def)
apply (simp add:a_zpz[THEN sym]) apply simp
apply (drule_tac x = n in spec,
drule_tac x = n in spec)
apply (simp add:Ring.ring_inv1_1[of "K" "b" "c"],
cut_tac Ring.ring_is_ag, frule aGroup.ag_mOp_closed[of "K" "c"],
assumption+,
simp add:Ring.ring_distrib1[THEN sym],
frule aGroup.ag_mOp_closed[of "K" "b"], assumption+,
simp add:Ring.ring_distrib2[THEN sym],
subst Ring.ring_tOp_commute[of "K" _ "c"], assumption+,
rule aGroup.ag_pOp_closed, assumption+)
apply (cut_tac n = N in an_nat_pos)
apply (frule_tac n = "an N" in vp_apow_ideal[of "v"], assumption+)
apply (frule Vr_ring[of "v"])
apply (frule_tac x = "(f n) ⋅⇩r (g n ± -⇩a c)" and y = "c ⋅⇩r (f n ± -⇩a b)"
and I = "vp K v⇗ (Vr K v) (an N)⇖" in Ring.ideal_pOp_closed[of "Vr K v"],
assumption+)
apply (frule_tac R = "Vr K v" and I = "vp K v⇗ (Vr K v) (an N)⇖" and
h = "(f n) ⋅⇩r (g n ± -⇩a c)" in Ring.ideal_subset, assumption+,
frule_tac R = "Vr K v" and I = "vp K v⇗ (Vr K v) (an N)⇖" and
h = "c ⋅⇩r (f n ± -⇩a b)" in Ring.ideal_subset, assumption+)
apply (simp add:Vr_pOp_f_pOp, assumption+)
apply (rule allI)
apply (thin_tac "∀N. ∃M. ∀n>M. f n ± -⇩a b ∈ vp K v⇗ (Vr K v) (an N)⇖",
thin_tac "∀N. ∃M. ∀n>M. g n ± -⇩a c ∈ vp K v⇗ (Vr K v) (an N)⇖")
apply (drule_tac x = j in spec,
drule_tac x = j in spec,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule_tac x = "f j" and y = "g j" in Ring.ring_tOp_closed, assumption+,
frule_tac x = "b" and y = "c" in Ring.ring_tOp_closed, assumption+,
frule_tac x = "f j" and y = "c" in Ring.ring_tOp_closed, assumption+,
frule_tac x = c in aGroup.ag_mOp_closed[of "K"], assumption+,
frule_tac x = "f j" and y = "-⇩a c" in Ring.ring_tOp_closed, assumption+,
frule_tac x = "b ⋅⇩r c" in aGroup.ag_mOp_closed[of "K"], assumption+)
apply (subst aGroup.pOp_assocTr41[THEN sym, of "K"], assumption+,
subst aGroup.pOp_assocTr42[of "K"], assumption+,
subst Ring.ring_distrib1[THEN sym, of "K"], assumption+)
apply (simp add:aGroup.ag_l_inv1, simp add:Ring.ring_times_x_0,
simp add:aGroup.ag_r_zero)
done
lemma an_npn[simp]:"an (n + m) = an n + an m"
by (simp add:an_def a_zpz)
lemma Abs_noninf:"a ≠ -∞ ∧ a ≠ ∞ ⟹ Abs a ≠ ∞"
by (cut_tac mem_ant[of "a"], simp, erule exE, simp add:Abs_def,
simp add:aminus)
lemma (in Corps) limit_t_zero:"⟦c ∈ carrier K; valuation K v;
∀(j::nat). f j ∈ carrier K; ∀(j::nat). g j ∈ carrier K;
lim⇘K v⇙ f 𝟬; lim⇘K v⇙ g c⟧ ⟹ lim⇘K v⇙ (λj. (f j) ⋅⇩r (g j)) 𝟬"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
simp add:limit_def, simp add:aGroup.ag_inv_zero, simp add:aGroup.ag_r_zero)
apply (subgoal_tac "∀j. (f j) ⋅⇩r (g j) ∈ carrier K",
simp add:aGroup.ag_r_zero)
prefer 2 apply (rule allI, simp add:Ring.ring_tOp_closed)
apply (case_tac "c = 𝟬⇘K⇙")
apply (simp add:aGroup.ag_inv_zero, simp add:aGroup.ag_r_zero)
apply (rule allI,
rotate_tac 4,
drule_tac x = N in spec,
drule_tac x = N in spec, (erule exE)+,
rename_tac N M1 M2)
apply (subgoal_tac "∀n>(max M1 M2). (f n) ⋅⇩r (g n) ∈ (vp K v)⇗(Vr K v) (an N)⇖",
blast)
apply (rule allI, rule impI)
apply (drule_tac x = M1 and y = M2 in two_inequalities, assumption+,
thin_tac "∀n>M2. g n ∈ vp K v⇗ (Vr K v) (an N)⇖")
apply (thin_tac "∀j. f j ⋅⇩r g j ∈ carrier K",
thin_tac "∀j. f j ∈ carrier K",
thin_tac "∀j. g j ∈ carrier K",
drule_tac x = n in spec, simp, erule conjE,
erule conjE,
frule Vr_ring[of v])
apply (cut_tac n = N in an_nat_pos)
apply (frule_tac x = "f n" in mem_vp_apow_mem_Vr[of "v"], assumption+,
frule_tac x = "g n" in mem_vp_apow_mem_Vr[of "v"], assumption+,
frule_tac n = "an N" in vp_apow_ideal[of "v"], assumption+)
apply (frule_tac I = "vp K v⇗(Vr K v) (an N)⇖" and x = "g n" and
r = "f n" in Ring.ideal_ring_multiple[of "Vr K v"], assumption+,
simp add:Vr_tOp_f_tOp)
apply (rule allI)
apply (subgoal_tac "∀j. (f j) ⋅⇩r (g j) =
(f j) ⋅⇩r ((g j) ± (-⇩a c)) ± (f j) ⋅⇩r c", simp,
thin_tac "∀j. (f j) ⋅⇩r (g j) =
(f j) ⋅⇩r ((g j) ± (-⇩a c)) ± (f j) ⋅⇩r c",
thin_tac "∀j. (f j) ⋅⇩r ( g j ± -⇩a c) ± (f j) ⋅⇩r c ∈ carrier K")
apply (rotate_tac 4,
drule_tac x = "N + na (Abs (n_val K v c))" in spec,
drule_tac x = N in spec)
apply (erule exE)+ apply (rename_tac N M1 M2)
apply (subgoal_tac "∀n. (max M1 M2) < n ⟶ (f n) ⋅⇩r (g n ± -⇩a c) ±
(f n) ⋅⇩r c ∈ vp K v⇗(Vr K v) (an N)⇖", blast)
apply (rule allI, rule impI, simp, erule conjE,
drule_tac x = n in spec,
drule_tac x = n in spec,
drule_tac x = n in spec)
apply (frule n_val_valuation[of "v"])
apply (frule value_in_aug_inf[of "n_val K v" "c"], assumption+,
simp add:aug_inf_def)
apply (frule val_nonzero_noninf[of "n_val K v" "c"], assumption+)
apply (cut_tac Abs_noninf[of "n_val K v c"])
apply (cut_tac Abs_pos[of "n_val K v c"]) apply (simp add:an_na)
apply (drule_tac x = n in spec, simp)
apply (frule_tac b = "f n" and n = "an N" in convergenceTr1[of
"v" "c"], assumption+)
apply simp
apply (frule_tac x = "f n" and N = "an N + Abs (n_val K v c)" in
mem_vp_apow_mem_Vr[of "v"],
frule_tac n = "an N" in vp_apow_ideal[of "v"])
apply simp
apply (rule_tac x = "an N" and y = "Abs (n_val K v c)" in aadd_two_pos)
apply simp apply (simp add:Abs_pos) apply assumption
apply (frule_tac x = "g n ± (-⇩a c)" and N = "an N" in mem_vp_apow_mem_Vr[of
"v"], simp, assumption+) apply (
frule_tac x = "c ⋅⇩r (f n)" and N = "an N" in mem_vp_apow_mem_Vr[of
"v"], simp) apply simp
apply (simp add:Ring.ring_tOp_commute[of "K" "c"]) apply (
frule Vr_ring[of "v"],
frule_tac I = "(vp K v)⇗(Vr K v) (an N)⇖" and x = "g n ± (-⇩a c)"
and r = "f n" in Ring.ideal_ring_multiple[of "Vr K v"])
apply (simp add:vp_apow_ideal) apply assumption+
apply (frule_tac I = "vp K v⇗(Vr K v) (an N)⇖" and
x = "(f n) ⋅⇩r (g n ± -⇩a c)" and y = "(f n) ⋅⇩r c" in
Ring.ideal_pOp_closed[of "Vr K v"])
apply (simp add:vp_apow_ideal)
apply (simp add:Vr_tOp_f_tOp, assumption)
apply (simp add:Vr_tOp_f_tOp Vr_pOp_f_pOp,
frule_tac x = "(f n) ⋅⇩r (g n ± -⇩a c)" and N = "an N" in mem_vp_apow_mem_Vr[of "v"], simp add:Vr_pOp_f_pOp, assumption+)
apply (frule_tac N = "an N" and x = "(f n) ⋅⇩r c" in mem_vp_apow_mem_Vr[of
"v"]) apply simp apply assumption
apply (simp add:Vr_pOp_f_pOp) apply simp
apply (thin_tac "∀N. ∃M. ∀n>M. f n ∈ vp K v⇗ (Vr K v) (an N)⇖",
thin_tac "∀N. ∃M. ∀n>M. g n ± -⇩a c ∈ vp K v⇗ (Vr K v) (an N)⇖",
rule allI)
apply (drule_tac x = j in spec,
drule_tac x = j in spec,
drule_tac x = j in spec,
frule aGroup.ag_mOp_closed[of "K" "c"], assumption+,
frule_tac x = "f j" in Ring.ring_tOp_closed[of "K" _ "c"], assumption+,
frule_tac x = "f j" in Ring.ring_tOp_closed[of "K" _ "-⇩a c"], assumption+)
apply (simp add:Ring.ring_distrib1, simp add:aGroup.ag_pOp_assoc,
simp add:Ring.ring_distrib1[THEN sym],
simp add:aGroup.ag_l_inv1, simp add:Ring.ring_times_x_0,
simp add:aGroup.ag_r_zero)
done
lemma (in Corps) limit_minus:"⟦valuation K v; ∀j. f j ∈ carrier K;
b ∈ carrier K; lim⇘K v⇙ f b⟧ ⟹ lim⇘K v⇙ (λj. (-⇩a (f j))) (-⇩a b)"
apply (simp add:limit_def)
apply (rule allI,
rotate_tac -1, frule_tac x = N in spec,
thin_tac "∀N. ∃M. ∀n. M < n ⟶
f n ± -⇩a b ∈ (vp K v)⇗(Vr K v) (an N)⇖",
erule exE,
subgoal_tac "∀n. M < n ⟶
(-⇩a (f n)) ± (-⇩a (-⇩a b)) ∈ (vp K v)⇗(Vr K v) (an N)⇖",
blast)
apply (rule allI, rule impI,
frule_tac x = n in spec,
frule_tac x = n in spec, simp)
apply (frule Vr_ring[of "v"],
frule_tac n = "an N" in vp_apow_ideal[of "v"], simp)
apply (frule_tac x = "f n ± -⇩a b" and N = "an N" in
mem_vp_apow_mem_Vr[of "v"], simp+,
frule_tac I = "vp K v⇗(Vr K v) (an N)⇖" and x = "f n ± (-⇩a b)" in
Ring.ideal_inv1_closed[of "Vr K v"], assumption+, simp)
apply (simp add:Vr_mOp_f_mOp)
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule aGroup.ag_mOp_closed[of "K" "b"], assumption+)
apply (simp add:aGroup.ag_p_inv[of "K"])
done
lemma (in Corps) inv_diff:"⟦x ∈ carrier K; x ≠ 𝟬; y ∈ carrier K; y ≠ 𝟬⟧ ⟹
(x⇗‐K⇖) ± (-⇩a (y⇗‐K⇖)) = (x⇗‐K⇖) ⋅⇩r ( y⇗‐K⇖) ⋅⇩r (-⇩a (x ± (-⇩a y)))"
apply (cut_tac invf_closed1[of "x"], simp, erule conjE,
cut_tac invf_closed1[of y], simp, erule conjE,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Ring.ring_tOp_closed[of "K" "x⇗‐K⇖" "y⇗‐K⇖"], assumption+,
frule aGroup.ag_mOp_closed[of "K" "x"], assumption+,
frule aGroup.ag_mOp_closed[of "K" "y"], assumption+,
frule aGroup.ag_mOp_closed[of "K" "x⇗‐K⇖"], assumption+,
frule aGroup.ag_mOp_closed[of "K" "y⇗‐K⇖"], assumption+,
frule aGroup.ag_pOp_closed[of "K" "x" "-⇩a y"], assumption+)
apply (simp add:Ring.ring_inv1_2[THEN sym],
simp only:Ring.ring_distrib1[of "K" "(x⇗‐K⇖) ⋅⇩r (y⇗‐K⇖)" "x" "-⇩a y"],
simp only:Ring.ring_tOp_commute[of "K" _ x],
simp only:Ring.ring_inv1_2[THEN sym, of "K"],
simp only:Ring.ring_tOp_assoc[THEN sym],
simp only:Ring.ring_tOp_commute[of "K" "x"],
cut_tac linvf[of "x"], simp+,
simp add:Ring.ring_l_one, simp only:Ring.ring_tOp_assoc,
cut_tac linvf[of "y"], simp+,
simp only:Ring.ring_r_one)
apply (simp add:aGroup.ag_p_inv[of "K"], simp add:aGroup.ag_inv_inv,
rule aGroup.ag_pOp_commute[of "K" "x⇗‐K⇖" "-⇩a y⇗‐K⇖"], assumption+)
apply simp+
done
lemma times2plus:"(2::nat)*n = n + n"
by simp
lemma (in Corps) limit_inv:"⟦valuation K v; ∀j. f j ∈ carrier K;
b ∈ carrier K; b ≠ 𝟬; lim⇘K v⇙ f b⟧ ⟹
lim⇘K v⇙ (λj. if (f j) = 𝟬 then 𝟬 else (f j)⇗‐K⇖) (b⇗‐K⇖)"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (frule limit_n_val[of "b" "v" "f"], assumption+)
apply (subst limit_def)
apply (rule allI, erule exE)
apply (subgoal_tac "∀m>Na. f m ≠ 𝟬")
prefer 2
apply (rule allI, rule impI, rotate_tac -2,
drule_tac x = m in spec, simp)
apply (frule n_val_valuation[of v])
apply (frule val_nonzero_noninf[of "n_val K v" b], assumption+)
apply (rule contrapos_pp, simp+, simp add:value_of_zero)
apply (unfold limit_def)
apply (rotate_tac 2,
frule_tac x = "N + 2*(na (Abs (n_val K v b)))" in
spec)
apply (erule exE)
apply (subgoal_tac "∀n>(max Na M).
(if f n = 𝟬 then 𝟬 else f n⇗‐K⇖) ± -⇩a b⇗‐K⇖ ∈ vp K v⇗(Vr K v) (an N)⇖",
blast)
apply (rule allI, rule impI)
apply (cut_tac x = "Na" and y = "max Na M" and z = n
in le_less_trans)
apply simp+
apply (thin_tac "∀N. ∃M. ∀n>M. f n ± -⇩a b ∈ vp K v⇗ (Vr K v) (an N)⇖")
apply (drule_tac x = n in spec,
drule_tac x = n in spec,
drule_tac x = n in spec,
drule_tac x = n in spec, simp)
apply (subst inv_diff, assumption+)
apply (cut_tac x = "f n" in invf_closed1, simp,
cut_tac x = b in invf_closed1, simp, simp, (erule conjE)+)
apply (frule_tac n = "an N + an (2 * na (Abs (n_val K v b)))" and
x = "f n ± -⇩a b" in n_value_x_1[of v])
apply (simp only:an_npn[THEN sym], rule an_nat_pos)
apply assumption
apply (rule_tac x = "f n⇗‐ K⇖ ⋅⇩r b⇗‐ K⇖ ⋅⇩r (-⇩a (f n ± -⇩a b))" and v = v and
n = "an N" in n_value_x_2, assumption+)
apply (frule n_val_valuation[of v])
apply (subst val_pos_mem_Vr[THEN sym, of "v"], assumption+)
apply (rule Ring.ring_tOp_closed, assumption+)+
apply (rule aGroup.ag_mOp_closed, assumption)
apply (rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+)
apply (subst val_pos_n_val_pos[of v], assumption+,
rule Ring.ring_tOp_closed, assumption+,
rule Ring.ring_tOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+,
rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+)
apply (subst val_t2p[of "n_val K v"], assumption+,
rule Ring.ring_tOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+,
rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+,
subst val_minus_eq[of "n_val K v"], assumption+,
(rule aGroup.ag_pOp_closed, assumption+),
(rule aGroup.ag_mOp_closed, assumption+))
apply (subst val_t2p[of "n_val K v"], assumption+)
apply (simp add:value_of_inv)
apply (frule_tac x = "an N + an (2 * na (Abs (n_val K v b)))" and y = "n_val K v (f n ± -⇩a b)" and z = "- n_val K v b + - n_val K v b" in aadd_le_mono)
apply (cut_tac z = "n_val K v b" in Abs_pos)
apply (frule val_nonzero_z[of "n_val K v" b], assumption+, erule exE)
apply (rotate_tac -1, drule sym, cut_tac z = z in z_neq_minf,
cut_tac z = z in z_neq_inf, simp,
cut_tac a = "(n_val K v b)" in Abs_noninf, simp)
apply (simp only:times2plus an_npn, simp add:an_na)
apply (rotate_tac -4, drule sym, simp)
apply (thin_tac "f n ± -⇩a b ∈ vp K v⇗ (Vr K v) (an N + (ant ¦z¦ + ant ¦z¦))⇖")
apply (simp add:an_def, simp add:aminus, (simp add:a_zpz)+)
apply (subst aadd_commute)
apply (rule_tac i = 0 and j = "ant (int N + 2 * ¦z¦ - 2 * z)" and
k = "n_val K v (f n ± -⇩a b) + ant (- (2 * z))" in ale_trans)
apply (subst ant_0[THEN sym])
apply (subst ale_zle, simp, assumption)
apply (frule n_val_valuation[of v])
apply (subst val_t2p[of "n_val K v"], assumption+)
apply (rule Ring.ring_tOp_closed, assumption+)+
apply (rule aGroup.ag_mOp_closed, assumption)
apply (rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+)
apply (subst val_t2p[of "n_val K v"], assumption+)
apply (subst val_minus_eq[of "n_val K v"], assumption+,
rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+)
apply (simp add:value_of_inv)
apply (frule_tac x = "an N + an (2 * na (Abs (n_val K v b)))" and y = "n_val K v (f n ± -⇩a b)" and z = "- n_val K v b + - n_val K v b" in aadd_le_mono)
apply (cut_tac z = "n_val K v b" in Abs_pos)
apply (frule val_nonzero_z[of "n_val K v" b], assumption+, erule exE)
apply (rotate_tac -1, drule sym, cut_tac z = z in z_neq_minf,
cut_tac z = z in z_neq_inf, simp,
cut_tac a = "(n_val K v b)" in Abs_noninf, simp)
apply (simp only:times2plus an_npn, simp add:an_na)
apply (rotate_tac -4, drule sym, simp)
apply (thin_tac "f n ± -⇩a b ∈ vp K v⇗ (Vr K v) (an N + (ant ¦z¦ + ant ¦z¦))⇖")
apply (simp add:an_def, simp add:aminus, (simp add:a_zpz)+)
apply (subst aadd_commute)
apply (rule_tac i = "ant (int N)" and j = "ant (int N + 2 * ¦z¦ - 2 * z)"
and k = "n_val K v (f n ± -⇩a b) + ant (- (2 * z))" in ale_trans)
apply (subst ale_zle, simp, assumption)
apply simp
done
definition
Cauchy_seq :: "[_ , 'b ⇒ ant, nat ⇒ 'b]
⇒ bool" ("(3Cauchy⇘ _ _ ⇙_)" [90,90,91]90) where
"Cauchy⇘K v⇙ f ⟷ (∀n. (f n) ∈ carrier K) ∧ (
∀N. ∃M. (∀n m. M < n ∧ M < m ⟶
((f n) ±⇘K⇙ (-⇩a⇘K⇙ (f m))) ∈ (vp K v)⇗(Vr K v) (an N)⇖))"
definition
v_complete :: "['b ⇒ ant, _] ⇒ bool"
("(2Complete⇘_⇙ _)" [90,91]90) where
"Complete⇘v⇙ K ⟷ (∀f. (Cauchy⇘K v⇙ f) ⟶
(∃b. b ∈ (carrier K) ∧ lim⇘K v⇙ f b))"
lemma (in Corps) has_limit_Cauchy:"⟦valuation K v; ∀j. f j ∈ carrier K;
b ∈ carrier K; lim⇘K v⇙ f b⟧ ⟹ Cauchy⇘K v⇙ f"
apply (simp add:Cauchy_seq_def)
apply (rule allI)
apply (simp add:limit_def)
apply (rotate_tac -1)
apply (drule_tac x = N in spec)
apply (erule exE)
apply (subgoal_tac "∀n m. M < n ∧ M < m ⟶
f n ± -⇩a (f m) ∈ vp K v⇗(Vr K v) (an N)⇖")
apply blast
apply ((rule allI)+, rule impI, erule conjE)
apply (frule_tac x = n in spec,
frule_tac x = m in spec,
thin_tac "∀j. f j ∈ carrier K",
frule_tac x = n in spec,
frule_tac x = m in spec,
thin_tac "∀n. M < n ⟶ f n ± -⇩a b ∈ vp K v⇗(Vr K v) (an N)⇖",
simp)
apply (frule_tac n = "an N" in vp_apow_ideal[of v], simp)
apply (frule Vr_ring[of "v"])
apply (frule_tac x = "f m ± -⇩a b" and I = "vp K v⇗(Vr K v) (an N)⇖" in
Ring.ideal_inv1_closed[of "Vr K v"], assumption+)
apply (frule_tac h = "f m ± -⇩a b" and I = "vp K v⇗(Vr K v) (an N)⇖" in
Ring.ideal_subset[of "Vr K v"], assumption+,
frule_tac h = "f n ± -⇩a b" and I = "vp K v⇗(Vr K v) (an N)⇖" in
Ring.ideal_subset[of "Vr K v"], assumption+)
apply (frule_tac h = "-⇩a⇘Vr K v⇙ (f m ± -⇩a b)" and I = "vp K v⇗(Vr K v) (an N)⇖" in Ring.ideal_subset[of "Vr K v"], assumption+,
frule_tac h = "f n ± -⇩a b" and I = "vp K v⇗(Vr K v) (an N)⇖" in
Ring.ideal_subset[of "Vr K v"], assumption+)
apply (frule_tac I = "(vp K v)⇗ (Vr K v) (an N)⇖" and x = "f n ± -⇩a b" and
y = "-⇩a⇘(Vr K v)⇙ (f m ± -⇩a b)" in Ring.ideal_pOp_closed[of "Vr K v"],
assumption+)
apply (simp add:Vr_pOp_f_pOp) apply (simp add:Vr_mOp_f_mOp)
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (frule aGroup.ag_mOp_closed[of "K" "b"], assumption+)
apply (frule_tac x = "f m ± -⇩a b" in Vr_mem_f_mem[of "v"], assumption+)
apply (frule_tac x = "f m ± -⇩a b" in aGroup.ag_mOp_closed[of "K"],
assumption+)
apply (simp add:aGroup.ag_pOp_assoc)
apply (simp add:aGroup.ag_pOp_commute[of "K" "-⇩a b"])
apply (simp add:aGroup.ag_p_inv[of "K"])
apply (frule_tac x = "f m" in aGroup.ag_mOp_closed[of "K"], assumption+)
apply (simp add:aGroup.ag_inv_inv)
apply (simp add:aGroup.ag_pOp_assoc[of "K" _ "b" "-⇩a b"])
apply (simp add:aGroup.ag_r_inv1[of "K"], simp add:aGroup.ag_r_zero)
done
lemma (in Corps) no_limit_zero_Cauchy:"⟦valuation K v; Cauchy⇘K v⇙ f;
¬ (lim⇘K v⇙ f 𝟬)⟧ ⟹
∃N M. (∀m. N < m ⟶ ((n_val K v) (f M)) = ((n_val K v) (f m)))"
apply (frule not_limit_zero[of "v" "f"], thin_tac "¬ lim⇘ K v ⇙f 𝟬")
apply (simp add:Cauchy_seq_def, assumption) apply (erule exE)
apply (rename_tac L)
apply (simp add:Cauchy_seq_def, erule conjE,
rotate_tac -1,
frule_tac x = L in spec, thin_tac "∀N. ∃M. ∀n m.
M < n ∧ M < m ⟶ f n ± -⇩a (f m) ∈ vp K v⇗(Vr K v) (an N)⇖")
apply (erule exE)
apply (drule_tac x = M in spec)
apply (erule exE, erule conjE)
apply (rotate_tac -3,
frule_tac x = m in spec)
apply (thin_tac "∀n m. M < n ∧ M < m ⟶
f n ± -⇩a (f m) ∈ (vp K v)⇗(Vr K v) (an L)⇖")
apply (subgoal_tac "M < m ∧ (∀ma. M < ma ⟶
n_val K v (f m) = n_val K v (f ma))")
apply blast
apply simp
apply (rule allI, rule impI)
apply (rotate_tac -2)
apply (drule_tac x = ma in spec)
apply simp
apply (frule Vr_ring[of "v"],
frule_tac n = "an L" in vp_apow_ideal[of "v"], simp)
apply (frule_tac I = "vp K v⇗(Vr K v) (an L)⇖" and x = "f m ± -⇩a (f ma)"
in Ring.ideal_inv1_closed[of "Vr K v"], assumption+) apply (
frule_tac I = "vp K v⇗(Vr K v) (an L)⇖" and
h = "f m ± -⇩a (f ma)" in Ring.ideal_subset[of "Vr K v"],
assumption+, simp add:Vr_mOp_f_mOp)
apply (frule_tac x = m in spec,
drule_tac x = ma in spec) apply (
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule_tac x = "f ma" in aGroup.ag_mOp_closed[of "K"], assumption+,
frule_tac x = "f m" and y = "-⇩a (f ma)" in aGroup.ag_p_inv[of "K"],
assumption+, simp only:aGroup.ag_inv_inv,
frule_tac x = "f m" in aGroup.ag_mOp_closed[of "K"], assumption+,
simp add:aGroup.ag_pOp_commute,
thin_tac "-⇩a ( f m ± -⇩a (f ma)) = f ma ± -⇩a (f m)",
thin_tac "f m ± -⇩a (f ma) ∈ vp K v⇗(Vr K v) (an L)⇖")
apply (frule_tac x = "f ma ± -⇩a (f m)" and n = "an L" in n_value_x_1[of
"v" ], simp) apply assumption apply (
frule n_val_valuation[of "v"],
frule_tac x = "f m" and y = "f ma ± -⇩a (f m)" in value_less_eq[of
"n_val K v"], assumption+) apply (simp add:aGroup.ag_pOp_closed)
apply (
rule_tac x = "n_val K v (f m)" and y = "an L" and
z = "n_val K v ( f ma ± -⇩a (f m))" in
aless_le_trans, assumption+)
apply (frule_tac x = "f ma ± -⇩a (f m)" in Vr_mem_f_mem[of "v"])
apply (simp add:Ring.ideal_subset)
apply (frule_tac x = "f m" and y = "f ma ± -⇩a (f m)" in
aGroup.ag_pOp_commute[of "K"], assumption+)
apply (simp add:aGroup.ag_pOp_assoc,
simp add:aGroup.ag_l_inv1, simp add:aGroup.ag_r_zero)
done
lemma (in Corps) no_limit_zero_Cauchy1:"⟦valuation K v; ∀j. f j ∈ carrier K;
Cauchy⇘K v⇙ f; ¬ (lim⇘K v⇙ f 𝟬)⟧ ⟹ ∃N M. (∀m. N < m ⟶ v (f M) = v (f m))"
apply (frule no_limit_zero_Cauchy[of "v" "f"], assumption+)
apply (erule exE)+
apply (subgoal_tac "∀m. N < m ⟶ v (f M) = v (f m)") apply blast
apply (rule allI, rule impI)
apply (frule_tac x = M in spec,
drule_tac x = m in spec,
drule_tac x = m in spec, simp)
apply (simp add:n_val[THEN sym, of "v"])
done
definition
subfield :: "[_, ('b, 'm1) Ring_scheme] ⇒ bool" where
"subfield K K' ⟷ Corps K' ∧ carrier K ⊆ carrier K' ∧
idmap (carrier K) ∈ rHom K K'"
definition
v_completion :: "['b ⇒ ant, 'b ⇒ ant, _, ('b, 'm) Ring_scheme] ⇒ bool"
("(4Completion⇘_ _⇙ _ _)" [90,90,90,91]90) where
"Completion⇘v v'⇙ K K' ⟷ subfield K K' ∧
Complete⇘v'⇙ K' ∧ (∀x ∈ carrier K. v x = v' x) ∧
(∀x ∈ carrier K'. (∃f. Cauchy⇘K v⇙ f ∧ lim⇘K' v'⇙ f x))"
lemma (in Corps) subfield_zero:"⟦Corps K'; subfield K K'⟧ ⟹ 𝟬⇘K⇙ = 𝟬⇘K'⇙"
apply (simp add:subfield_def, (erule conjE)+)
apply (simp add:rHom_def, (erule conjE)+)
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Corps.field_is_ring[of "K'"], frule Ring.ring_is_ag[of "K'"])
apply (frule aHom_0_0[of "K" "K'" "I⇘K⇙"], assumption+)
apply (frule aGroup.ag_inc_zero[of "K"], simp add:idmap_def)
done
lemma (in Corps) subfield_pOp:"⟦Corps K'; subfield K K'; x ∈ carrier K;
y ∈ carrier K⟧ ⟹ x ± y = x ±⇘K'⇙ y"
apply (cut_tac field_is_ring, frule Corps.field_is_ring[of "K'"],
frule Ring.ring_is_ag[of "K"], frule Ring.ring_is_ag[of "K'"])
apply (simp add:subfield_def, erule conjE, simp add:rHom_def,
frule conjunct1)
apply (thin_tac "I⇘K⇙ ∈ aHom K K' ∧
(∀x∈carrier K. ∀y∈carrier K. I⇘K⇙ (x ⋅⇩r y) = I⇘K⇙ x ⋅⇩r⇘K'⇙ I⇘K⇙ y) ∧
I⇘K⇙ 1⇩r = 1⇩r⇘K'⇙")
apply (frule aHom_add[of "K" "K'" "I⇘K⇙" "x" "y"], assumption+,
frule aGroup.ag_pOp_closed[of "K" "x" "y"], assumption+,
simp add:idmap_def)
done
lemma (in Corps) subfield_mOp:"⟦Corps K'; subfield K K'; x ∈ carrier K⟧ ⟹
-⇩a x = -⇩a⇘K'⇙ x"
apply (cut_tac field_is_ring, frule Corps.field_is_ring[of "K'"],
frule Ring.ring_is_ag[of "K"], frule Ring.ring_is_ag[of "K'"])
apply (simp add:subfield_def, erule conjE, simp add:rHom_def,
frule conjunct1)
apply (thin_tac "I⇘K⇙ ∈ aHom K K' ∧
(∀x∈carrier K. ∀y∈carrier K. I⇘K⇙ (x ⋅⇩r y) = I⇘K⇙ x ⋅⇩r⇘K'⇙ I⇘K⇙ y) ∧
I⇘K⇙ 1⇩r = 1⇩r⇘K'⇙")
apply (frule aHom_inv_inv[of "K" "K'" "I⇘K⇙" "x"], assumption+,
frule aGroup.ag_mOp_closed[of "K" "x"], assumption+)
apply (simp add:idmap_def)
done
lemma (in Corps) completion_val_eq:"⟦Corps K'; valuation K v; valuation K' v';
x ∈ carrier K; Completion⇘v v'⇙ K K'⟧ ⟹ v x = v' x"
apply (unfold v_completion_def, (erule conjE)+)
apply simp
done
lemma (in Corps) completion_subset:"⟦Corps K'; valuation K v; valuation K' v';
Completion⇘v v'⇙ K K'⟧ ⟹ carrier K ⊆ carrier K'"
apply (unfold v_completion_def, (erule conjE)+)
apply (simp add:subfield_def)
done
lemma (in Corps) completion_subfield:"⟦Corps K'; valuation K v;
valuation K' v'; Completion⇘v v'⇙ K K'⟧ ⟹ subfield K K'"
apply (simp add:v_completion_def)
done
lemma (in Corps) subfield_sub:"subfield K K' ⟹ carrier K ⊆ carrier K'"
apply (simp add:subfield_def)
done
lemma (in Corps) completion_Vring_sub:"⟦Corps K'; valuation K v;
valuation K' v'; Completion⇘v v'⇙ K K'⟧ ⟹
carrier (Vr K v) ⊆ carrier (Vr K' v')"
apply (rule subsetI,
frule completion_subset[of "K'" "v" "v'"], assumption+,
frule_tac x = x in Vr_mem_f_mem[of "v"], assumption+,
frule_tac x = x in completion_val_eq[of "K'" "v" "v'"],
assumption+)
apply (frule_tac x1 = x in val_pos_mem_Vr[THEN sym, of "v"],
assumption+, simp,
frule_tac c = x in subsetD[of "carrier K" "carrier K'"], assumption+,
simp add:Corps.val_pos_mem_Vr[of "K'" "v'"])
done
lemma (in Corps) completion_idmap_rHom:"⟦Corps K'; valuation K v;
valuation K' v'; Completion⇘v v'⇙ K K'⟧ ⟹
I⇘(Vr K v)⇙ ∈ rHom (Vr K v) (Vr K' v')"
apply (frule completion_Vring_sub[of "K'" "v" "v'"],
assumption+,
frule completion_subfield[of "K'" "v" "v'"],
assumption+,
frule Vr_ring[of "v"],
frule Ring.ring_is_ag[of "Vr K v"],
frule Corps.Vr_ring[of "K'" "v'"], assumption+,
frule Ring.ring_is_ag[of "Vr K' v'"])
apply (simp add:rHom_def)
apply (rule conjI)
apply (simp add:aHom_def,
rule conjI,
simp add:idmap_def, simp add:subsetD)
apply (rule conjI)
apply (simp add:idmap_def extensional_def)
apply ((rule ballI)+) apply (
frule_tac x = a and y = b in aGroup.ag_pOp_closed, assumption+,
simp add:idmap_def,
frule_tac c = a in subsetD[of "carrier (Vr K v)"
"carrier (Vr K' v')"], assumption+,
frule_tac c = b in subsetD[of "carrier (Vr K v)"
"carrier (Vr K' v')"], assumption+,
simp add:Vr_pOp_f_pOp,
frule_tac x = a in Vr_mem_f_mem[of v], assumption,
frule_tac x = b in Vr_mem_f_mem[of v], assumption,
simp add:Corps.Vr_pOp_f_pOp,
simp add:subfield_pOp)
apply (rule conjI)
apply ((rule ballI)+,
frule_tac x = x and y = y in Ring.ring_tOp_closed, assumption+,
simp add:idmap_def, simp add:subfield_def, erule conjE)
apply (frule_tac c = x in subsetD[of "carrier (Vr K v)"
"carrier (Vr K' v')"], assumption+,
frule_tac c = y in subsetD[of "carrier (Vr K v)"
"carrier (Vr K' v')"], assumption+)
apply (simp add:Vr_tOp_f_tOp Corps.Vr_tOp_f_tOp)
apply (frule_tac x = x in Vr_mem_f_mem[of "v"], assumption+,
frule_tac x = y in Vr_mem_f_mem[of "v"], assumption+,
frule_tac x = x in Corps.Vr_mem_f_mem[of "K'" "v'"], assumption+,
frule_tac x = y in Corps.Vr_mem_f_mem[of "K'" "v'"], assumption+,
cut_tac field_is_ring, frule Corps.field_is_ring[of "K'"],
frule_tac x = x and y = y in Ring.ring_tOp_closed[of "K"], assumption+)
apply (frule_tac x = x and y = y in rHom_tOp[of "K" "K'" _ _ "I⇘K⇙"],
assumption+, simp add:idmap_def)
apply (frule Ring.ring_one[of "Vr K v"], simp add:idmap_def)
apply (simp add:Vr_1_f_1 Corps.Vr_1_f_1)
apply (simp add:subfield_def, (erule conjE)+)
apply (cut_tac field_is_ring, frule Corps.field_is_ring[of "K'"],
frule Ring.ring_one[of "K"],
frule rHom_one[of "K" "K'" "I⇘K⇙"], assumption+, simp add:idmap_def)
done
lemma (in Corps) completion_vpr_sub:"⟦Corps K'; valuation K v; valuation K' v';
Completion⇘v v'⇙ K K'⟧ ⟹ vp K v ⊆ vp K' v'"
apply (rule subsetI,
frule completion_subset[of "K'" "v" "v'"], assumption+,
frule Vr_ring[of "v"], frule vp_ideal[of "v"],
frule_tac h = x in Ring.ideal_subset[of "Vr K v" "vp K v"],
assumption+,
frule_tac x = x in Vr_mem_f_mem[of "v"], assumption+,
frule_tac x = x in completion_val_eq[of "K'" "v" "v'"],
assumption+)
apply (frule completion_subset[of "K'" "v" "v'"],
assumption+,
frule_tac c = x in subsetD[of "carrier K" "carrier K'"], assumption+,
simp add:Corps.vp_mem_val_poss vp_mem_val_poss)
done
lemma (in Corps) val_v_completion:"⟦Corps K'; valuation K v; valuation K' v';
x ∈ carrier K'; x ≠ 𝟬⇘K'⇙; Completion⇘v v'⇙ K K'⟧ ⟹
∃f. (Cauchy⇘K v⇙ f) ∧ (∃N. (∀m. N < m ⟶ v (f m) = v' x))"
apply (simp add:v_completion_def, erule conjE, (erule conjE)+)
apply (rotate_tac -1, drule_tac x = x in bspec, assumption+,
erule exE, erule conjE,
subgoal_tac "∃N. ∀m. N < m ⟶ v (f m) = v' x", blast)
thm Corps.limit_val
apply (frule_tac f = f and v = v' in Corps.limit_val[of "K'" "x"],
assumption+,
unfold Cauchy_seq_def, frule conjunct1, fold Cauchy_seq_def)
apply (rule allI, drule_tac x = j in spec,
simp add:subfield_def, erule conjE, simp add:subsetD, assumption+)
apply (simp add:Cauchy_seq_def)
done
lemma (in Corps) v_completion_v_limit:"⟦Corps K'; valuation K v;
x ∈ carrier K; subfield K K'; Complete⇘v'⇙ K'; ∀j. f j ∈ carrier K;
valuation K' v'; ∀x∈carrier K. v x = v' x; lim⇘K' v' ⇙f x⟧ ⟹ lim⇘K v ⇙f x"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Corps.field_is_ring[of K'], frule Ring.ring_is_ag[of "K'"],
subgoal_tac "∀j. f j ∈ carrier K'",
unfold subfield_def, frule conjunct2, fold subfield_def, erule conjE)
apply (frule subsetD[of "carrier K" "carrier K'" "x"], assumption+,
simp add:limit_diff_val[of "x" "f"],
subgoal_tac "∀n. f n ±⇘K'⇙ -⇩a⇘K'⇙ x = f n ± -⇩a x")
apply (rule allI)
apply (simp add:limit_def)
apply (rotate_tac 6, drule_tac x = N in spec,
erule exE)
apply (subgoal_tac "∀n>M. an N ≤ v'(f n ± -⇩a x)",
subgoal_tac "∀n. (v' (f n ± -⇩a x) = v (f n ± -⇩a x))", simp, blast)
apply (rule allI)
apply (frule_tac x = "f n ± -⇩a x" in bspec,
rule aGroup.ag_pOp_closed, assumption+, simp,
rule aGroup.ag_mOp_closed, assumption+) apply simp
apply (rule allI, rule impI)
apply (frule_tac v = v' and n = "an N" and x = "f n ± -⇩a x" in
Corps.n_value_x_1[of K'], assumption+, simp, simp)
apply (frule_tac v = v' and x = "f n ± -⇩a x" in Corps.n_val_le_val[of K'],
assumption+)
apply (cut_tac x = "f n" and y = "-⇩a x" in aGroup.ag_pOp_closed, assumption,
simp, rule aGroup.ag_mOp_closed, assumption+, simp add:subsetD)
apply (subst Corps.val_pos_n_val_pos[of K' v'], assumption+)
apply (cut_tac x = "f n" and y = "-⇩a x" in aGroup.ag_pOp_closed, assumption,
simp, rule aGroup.ag_mOp_closed, assumption+, simp add:subsetD)
apply (rule_tac i = 0 and j = "an N" and k = "n_val K' v' (f n ± -⇩a x)" in
ale_trans, simp+, rule allI)
apply (subst subfield_pOp[of K'], assumption+, simp+,
rule aGroup.ag_mOp_closed, assumption+)
apply (simp add:subfield_mOp[of K'])
apply (cut_tac subfield_sub[of K'], simp add:subsetD, assumption+)
done
lemma (in Corps) Vr_idmap_aHom:"⟦Corps K'; valuation K v; valuation K' v';
subfield K K'; ∀x∈carrier K. v x = v' x⟧ ⟹
I⇘(Vr K v)⇙ ∈ aHom (Vr K v) (Vr K' v')"
apply (simp add:aHom_def)
apply (subgoal_tac "I⇘(Vr K v)⇙ ∈ carrier (Vr K v) → carrier (Vr K' v')")
apply simp
apply (rule conjI)
apply (simp add:idmap_def)
apply (rule ballI)+
apply (frule Vr_ring[of "v"],
frule Ring.ring_is_ag[of "Vr K v"],
frule Corps.Vr_ring[of "K'" "v'"], assumption+,
frule Ring.ring_is_ag[of "Vr K' v'"])
apply (frule_tac x = a and y = b in aGroup.ag_pOp_closed[of "Vr K v"],
assumption+,
frule_tac x = a in funcset_mem[of "I⇘(Vr K v)⇙"
"carrier (Vr K v)" "carrier (Vr K' v')"], assumption+,
frule_tac x = b in funcset_mem[of "I⇘(Vr K v)⇙"
"carrier (Vr K v)" "carrier (Vr K' v')"], assumption+,
frule_tac x = "(I⇘(Vr K v)⇙) a" and y = "(I⇘(Vr K v)⇙) b" in
aGroup.ag_pOp_closed[of "Vr K' v'"], assumption+,
simp add:Vr_pOp_f_pOp)
apply (simp add:idmap_def, simp add:subfield_def, erule conjE,
simp add:rHom_def, frule conjunct1,
thin_tac "I⇘K⇙ ∈ aHom K K' ∧
(∀x∈carrier K. ∀y∈carrier K. I⇘K⇙ (x ⋅⇩r y) = I⇘K⇙ x ⋅⇩r⇘K'⇙ I⇘K⇙ y) ∧
I⇘K⇙ 1⇩r = 1⇩r⇘K'⇙")
apply (simp add:Corps.Vr_pOp_f_pOp[of K' v'])
apply (frule_tac x = a in Vr_mem_f_mem[of v], assumption+,
frule_tac x = b in Vr_mem_f_mem[of v], assumption+)
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of K],
frule Corps.field_is_ring[of K'], frule Ring.ring_is_ag[of K'])
apply (frule_tac a = a and b = b in aHom_add[of K K' "I⇘K⇙"], assumption+,
frule_tac x = a and y = b in aGroup.ag_pOp_closed[of K], assumption+,
simp add:idmap_def)
apply (rule Pi_I,
drule_tac x = x in bspec, simp add:Vr_mem_f_mem)
apply (simp add:idmap_def)
apply (frule_tac x1 = x in val_pos_mem_Vr[THEN sym, of v],
simp add:Vr_mem_f_mem, simp)
apply (subst Corps.val_pos_mem_Vr[THEN sym, of K' v'], assumption+,
frule_tac x = x in Vr_mem_f_mem[of v], assumption+,
frule subfield_sub[of K'], simp add:subsetD)
apply assumption
done
lemma amult_pos_pos:"0 ≤ a ⟹ 0 ≤ a * an N"
apply (case_tac "N = 0", simp add:an_0)
apply (case_tac "a = ∞", simp)
apply (frule apos_neq_minf[of a])
apply (subst ant_tna[THEN sym, of a], simp)
apply (subst amult_0_r, simp)
apply (case_tac "a = ∞", simp add:an_def)
apply (frule apos_neq_minf[of a])
apply (subst ant_tna[THEN sym, of a], simp)
apply (case_tac "a = 0", simp)
apply (simp add:ant_0 an_def amult_0_l)
apply (cut_tac amult_pos1[of "tna a" "an N"])
apply (simp add:ant_tna)
apply (rule_tac ale_trans[of 0 "an N" "a * an N"], simp+)
apply (frule ale_neq_less[of 0 a], rule not_sym, assumption)
apply (subst aless_zless[THEN sym, of 0 "tna a"], simp add:ant_tna ant_0)
apply simp
done
lemma (in Corps) Cauchy_down:"⟦Corps K'; valuation K v; valuation K' v';
subfield K K'; ∀x∈carrier K. v x = v' x; ∀j. f j ∈ carrier K; Cauchy⇘K' v' ⇙f⟧
⟹ Cauchy⇘K v ⇙f"
apply (simp add:Cauchy_seq_def, rule allI, erule conjE)
apply (rotate_tac -1, drule_tac
x = "na (Lv K v) * N" in spec,
erule exE,
subgoal_tac "∀n m. M < n ∧ M < m ⟶
f n ± (-⇩a (f m)) ∈ vp K v⇗(Vr K v) (an N)⇖", blast)
apply (simp add:amult_an_an) apply (simp add:an_na_Lv)
apply ((rule allI)+, rule impI, erule conjE) apply (
rotate_tac -3, drule_tac x = n in spec,
rotate_tac -1, drule_tac x = m in spec,
simp)
apply (rotate_tac 7,
frule_tac x = n in spec,
drule_tac x = m in spec)
apply (simp add:subfield_mOp[THEN sym],
cut_tac field_is_ring, frule Ring.ring_is_ag[of K],
frule_tac x = "f m" in aGroup.ag_mOp_closed[of K], assumption+)
apply (simp add:subfield_pOp[THEN sym])
apply (frule_tac x = "f n" and y = "-⇩a f m" in aGroup.ag_pOp_closed,
assumption+,
frule subfield_sub[of K'],
frule_tac c = "f n ± -⇩a f m" in subsetD[of "carrier K" "carrier K'"],
assumption+)
apply (frule Lv_pos[of v],
frule aless_imp_le[of 0 "Lv K v"])
apply (frule_tac N = N in amult_pos_pos[of "Lv K v"])
apply (frule_tac n = "(Lv K v) * an N" and x = "f n ± -⇩a f m" in
Corps.n_value_x_1[of K' v'], assumption+)
apply (frule_tac x = "f n ± -⇩a f m" in Corps.n_val_le_val[of K' v'],
assumption+,
frule_tac j = "Lv K v * an N" and k = "n_val K' v' (f n ± -⇩a f m)" in
ale_trans[of 0], assumption+, simp add:Corps.val_pos_n_val_pos)
apply (frule_tac i = "Lv K v * an N" and j = "n_val K' v' (f n ± -⇩a f m)"
and k = "v' (f n ± -⇩a f m)" in ale_trans, assumption+,
thin_tac "n_val K' v' (f n ± -⇩a f m) ≤ v' (f n ± -⇩a f m)",
thin_tac "Lv K v * an N ≤ n_val K' v' (f n ± -⇩a f m)")
apply (rotate_tac 1,
drule_tac x = "f n ± -⇩a f m" in bspec, assumption,
rotate_tac -1, drule sym, simp)
apply (frule_tac v1 = v and x1 = "f n ± -⇩a f m" in n_val[THEN sym],
assumption)
apply simp
apply (simp only:amult_commute[of _ "Lv K v"])
apply (frule Lv_z[of v], erule exE)
apply (cut_tac w = z and x = "an N" and y = "n_val K v (f n ± -⇩a f m)" in
amult_pos_mono_l,
cut_tac m = 0 and n = z in aless_zless, simp add:ant_0)
apply simp
apply (rule_tac x="f n ± -⇩a (f m)" and n = "an N" in n_value_x_2[of v],
assumption+)
apply (subst val_pos_mem_Vr[THEN sym, of v], assumption+)
apply (subst val_pos_n_val_pos[of v], assumption+)
apply (rule_tac j = "an N" and k = "n_val K v (f n ± -⇩a f m)" in
ale_trans[of 0], simp, assumption+)
apply simp
done
lemma (in Corps) Cauchy_up:"⟦Corps K'; valuation K v; valuation K' v';
Completion⇘v v'⇙ K K'; Cauchy⇘ K v ⇙f⟧ ⟹ Cauchy⇘ K' v' ⇙f"
apply (simp add:Cauchy_seq_def,
erule conjE,
rule conjI, unfold v_completion_def, frule conjunct1,
fold v_completion_def, rule allI, frule subfield_sub[of K'])
apply (simp add:subsetD)
apply (rule allI)
apply (rotate_tac -1, drule_tac x = "na (Lv K' v') * N"
in spec, erule exE)
apply (subgoal_tac "∀n m. M < n ∧ M < m ⟶
f n ±⇘K'⇙ (-⇩a⇘K'⇙ (f m)) ∈ vp K' v'⇗(Vr K' v') (an N)⇖", blast,
(rule allI)+, rule impI, erule conjE)
apply (rotate_tac -3, drule_tac x = n in spec,
rotate_tac -1,
drule_tac x = m in spec, simp,
frule_tac x = n in spec,
drule_tac x = m in spec)
apply(unfold v_completion_def, frule conjunct1, fold v_completion_def,
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule_tac x = "f m" in aGroup.ag_mOp_closed[of "K"], assumption+,
frule_tac x = "f n" and y = "-⇩a (f m)" in aGroup.ag_pOp_closed[of "K"],
assumption+)
apply (simp add:amult_an_an) apply (simp add:Corps.an_na_Lv)
apply (simp add:subfield_mOp, simp add:subfield_pOp) apply (
frule_tac x = "f n ±⇘K'⇙ -⇩a⇘K'⇙ f m" and n = "(Lv K' v') * (an N)"
in n_value_x_1[of v])
apply (frule Corps.Lv_pos[of "K'" "v'"], assumption+,
frule Corps.Lv_z[of "K'" "v'"],
assumption, erule exE, simp,
cut_tac n = N in an_nat_pos,
frule_tac w1 = z and x1 = 0 and y1 = "an N" in
amult_pos_mono_l[THEN sym], simp, simp add:amult_0_r)
apply assumption
apply (frule_tac x = "f n ±⇘K'⇙ -⇩a⇘K'⇙ f m " in n_val_le_val[of v],
assumption+)
apply (subst n_val[THEN sym, of "v"], assumption+)
apply (frule Lv_pos[of "v"], frule Lv_z[of v], erule exE, simp)
apply (frule Corps.Lv_pos[of "K'" "v'"], assumption+,
frule Corps.Lv_z[of "K'" "v'"], assumption, erule exE, simp,
cut_tac n = N in an_nat_pos,
frule_tac w1 = za and x1 = 0 and y1 = "an N" in
amult_pos_mono_l[THEN sym], simp, simp add:amult_0_r)
apply (frule_tac j = "ant za * an N" and k = "n_val K v (f n ±⇘K'⇙ -⇩a⇘K'⇙ (f m))"
in ale_trans[of "0"], assumption+)
apply (frule_tac w1 = z and x1 = 0 and y1 = "n_val K v ( f n ±⇘K'⇙ -⇩a⇘K'⇙ (f m))"
in amult_pos_mono_r[THEN sym], simp, simp add:amult_0_l)
apply (frule_tac i = "Lv K' v' * an N" and j ="n_val K v ( f n ±⇘K'⇙ -⇩a⇘K'⇙ (f m))"
and k = "v ( f n ±⇘K'⇙ -⇩a⇘K'⇙ (f m))" in ale_trans, assumption+)
apply (thin_tac "f n ±⇘K'⇙ -⇩a⇘K'⇙ (f m) ∈ vp K v⇗ (Vr K v) (Lv K' v') * (an N)⇖",
thin_tac "Lv K' v' * an N ≤ n_val K v ( f n ±⇘K'⇙ -⇩a⇘K'⇙ (f m))",
thin_tac "n_val K v ( f n ±⇘K'⇙ -⇩a⇘K'⇙ (f m)) ≤ v ( f n ±⇘K'⇙ -⇩a⇘K'⇙ (f m))")
apply (simp add:v_completion_def, (erule conjE)+)
apply (thin_tac "∀x∈carrier K. v x = v' x",
thin_tac "∀x∈carrier K'. ∃f. Cauchy⇘ K v ⇙f ∧ lim⇘ K' v' ⇙f x")
apply (frule subfield_sub[of K'],
frule_tac c = "f n ±⇘K'⇙ -⇩a⇘K'⇙ (f m)" in
subsetD[of "carrier K" "carrier K'"], assumption+)
apply (simp add:Corps.n_val[THEN sym, of "K'" "v'"])
apply (simp add:amult_commute[of _ "Lv K' v'"])
apply (frule Corps.Lv_pos[of "K'" "v'"], assumption,
frule Corps.Lv_z[of "K'" "v'"], assumption+, erule exE, simp)
apply (simp add:amult_pos_mono_l)
apply (rule_tac x = "f n ±⇘K'⇙ -⇩a⇘K'⇙ (f m)" and n = "an N" in
Corps.n_value_x_2[of "K'" "v'"], assumption+)
apply (cut_tac n = N in an_nat_pos)
apply (frule_tac j = "an N" and k = "n_val K' v' (f n ±⇘K'⇙ -⇩a⇘K'⇙ (f m))" in
ale_trans[of "0"], assumption+)
apply (simp add:Corps.val_pos_n_val_pos[THEN sym, of "K'" "v'"])
apply (simp add:Corps.val_pos_mem_Vr) apply assumption apply simp
done
lemma max_gtTr:"(n::nat) < max (Suc n) (Suc m) ∧ m < max (Suc n) (Suc m)"
by (simp add:max_def)
lemma (in Corps) completion_approx:"⟦Corps K'; valuation K v; valuation K' v';
Completion⇘v v'⇙ K K'; x ∈ carrier (Vr K' v')⟧ ⟹
∃y∈carrier (Vr K v). (y ±⇘K'⇙ -⇩a⇘K'⇙ x) ∈ (vp K' v')"
apply (frule Corps.Vr_mem_f_mem [of "K'" "v'" "x"], assumption+,
frule Corps.val_pos_mem_Vr[THEN sym, of "K'" "v'" "x"], assumption+,
simp add:v_completion_def, (erule conjE)+,
rotate_tac -1, drule_tac x = x in bspec, assumption+,
erule exE, erule conjE)
apply (unfold Cauchy_seq_def, frule conjunct1, fold Cauchy_seq_def)
apply (case_tac "x = 𝟬⇘K'⇙",
simp, frule Corps.field_is_ring[of "K'"],
frule Ring.ring_is_ag[of "K'"],
subgoal_tac " 𝟬⇘K'⇙ ∈ carrier (Vr K v)",
subgoal_tac " (𝟬⇘K'⇙ ±⇘K'⇙ -⇩a⇘K'⇙ 𝟬⇘K'⇙)∈ vp K' v'", blast,
frule aGroup.ag_inc_zero[of "K'"], simp add:aGroup.ag_r_inv1,
simp add:Corps.Vr_0_f_0[THEN sym, of "K'" "v'"],
frule Corps.Vr_ring[of "K'" "v'"], assumption+,
frule Corps.vp_ideal[of "K'" "v'"], assumption+,
simp add:Ring.ideal_zero,
simp add:subfield_zero[THEN sym, of "K'"],
cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule aGroup.ag_inc_zero[of "K"],
simp add:Vr_0_f_0[THEN sym, of "v"],
frule Vr_ring[of "v"],simp add:Ring.ring_zero)
apply (frule_tac f = f in Corps.limit_val[of "K'" "x" _ "v'"],
assumption+)
apply (rule allI, rotate_tac -2, frule_tac x = j in spec,
frule subfield_sub[of K'], simp add:subsetD, assumption+)
apply (erule exE)
apply (simp add:limit_def,
frule Corps.Vr_ring[of K' v'], assumption+,
rotate_tac 10,
drule_tac x = "Suc 0" in spec, erule exE,
rotate_tac 1,
frule_tac x = N and y = M in two_inequalities, assumption+,
thin_tac "∀n>N. v' (f n) = v' x",
thin_tac "∀n>M. f n ±⇘K'⇙ -⇩a⇘K'⇙ x ∈ vp K' v'⇗ (Vr K' v') (an (Suc 0))⇖")
apply (frule Corps.vp_ideal[of K' v'], assumption+,
simp add:Ring.r_apow_Suc[of "Vr K' v'" "vp K' v'"])
apply (drule_tac x = "N + M + 1" in spec, simp,
drule_tac x = "N + M + 1" in spec, simp,
erule conjE)
apply (drule_tac x = "f (Suc (N + M))" in bspec, assumption+)
apply simp
apply (cut_tac x = "f (Suc (N + M))" in val_pos_mem_Vr[of v], assumption+)
apply simp apply blast
done
lemma (in Corps) res_v_completion_surj:"⟦ Corps K'; valuation K v;
valuation K' v'; Completion⇘v v'⇙ K K'⟧ ⟹
surjec⇘(Vr K v),(qring (Vr K' v') (vp K' v'))⇙
(compos (Vr K v) (pj (Vr K' v') (vp K' v')) (I⇘(Vr K v)⇙))"
apply (frule Vr_ring[of "v"],
frule Ring.ring_is_ag[of "Vr K v"],
frule Corps.Vr_ring[of "K'" "v'"], assumption+,
frule Ring.ring_is_ag[of "Vr K' v'"],
frule Ring.ring_is_ag[of "Vr K v"])
apply (frule Corps.vp_ideal[of "K'" "v'"], assumption+,
frule Ring.qring_ring[of "Vr K' v'" "vp K' v'"], assumption+)
apply (simp add:surjec_def)
apply (frule aHom_compos[of "Vr K v" "Vr K' v'"
"qring (Vr K' v') (vp K' v')" "I⇘(Vr K v)⇙"
"pj (Vr K' v') (vp K' v')"], assumption+, simp add:Ring.ring_is_ag)
apply (rule Vr_idmap_aHom, assumption+) apply (simp add:completion_subfield,
simp add:v_completion_def) apply (
frule pj_Hom[of "Vr K' v'" "vp K' v'"], assumption+) apply (
simp add:rHom_def, simp)
apply (rule surj_to_test)
apply (simp add:aHom_def)
apply (rule ballI)
apply (thin_tac "Ring (Vr K' v' /⇩r vp K' v')",
thin_tac "compos (Vr K v) (pj (Vr K' v') (vp K' v')) (I⇘(Vr K v)⇙) ∈
aHom (Vr K v) (Vr K' v' /⇩r vp K' v')")
apply (simp add:Ring.qring_carrier)
apply (erule bexE)
apply (frule_tac x = a in completion_approx[of "K'" "v" "v'"],
assumption+, erule bexE)
apply (subgoal_tac "compos (Vr K v) (pj (Vr K' v')
(vp K' v')) ((I⇘(Vr K v)⇙)) y = b", blast)
apply (simp add:compos_def compose_def idmap_def)
apply (frule completion_Vring_sub[of "K'" "v" "v'"], assumption+)
apply (frule_tac c = y in subsetD[of "carrier (Vr K v)" "carrier (Vr K' v')"],
assumption+)
apply (frule_tac x = y in pj_mem[of "Vr K' v'" "vp K' v'"], assumption+, simp,
thin_tac "pj (Vr K' v') (vp K' v') y = y ⊎⇘(Vr K' v')⇙ (vp K' v')")
apply (rotate_tac -5, frule sym, thin_tac "a ⊎⇘(Vr K' v')⇙ (vp K' v') = b",
simp)
apply (rule_tac b1 = y and a1 = a in Ring.ar_coset_same1[THEN sym,
of "Vr K' v'" "vp K' v'"], assumption+)
apply (frule Ring.ring_is_ag[of "Vr K' v'"],
frule_tac x = a in aGroup.ag_mOp_closed[of "Vr K' v'"],
assumption+)
apply (simp add:Corps.Vr_mOp_f_mOp, simp add:Corps.Vr_pOp_f_pOp)
done
lemma (in Corps) res_v_completion_ker:"⟦Corps K'; valuation K v;
valuation K' v'; Completion⇘v v'⇙ K K'⟧ ⟹
ker⇘(Vr K v), (qring (Vr K' v') (vp K' v'))⇙
(compos (Vr K v) (pj (Vr K' v') (vp K' v')) (I⇘(Vr K v)⇙)) = vp K v"
apply (rule equalityI)
apply (rule subsetI)
apply (simp add:ker_def, (erule conjE)+)
apply (frule Corps.Vr_ring[of "K'" "v'"], assumption+,
frule Corps.vp_ideal[of "K'" "v'"], assumption+,
frule Ring.qring_ring[of "Vr K' v'" "vp K' v'"], assumption+,
simp add:Ring.qring_zero)
apply (simp add:compos_def, simp add:compose_def, simp add:idmap_def)
apply (frule completion_Vring_sub[of "K'" "v" "v'"], assumption+)
apply (frule_tac c = x in subsetD[of "carrier (Vr K v)" "carrier (Vr K' v')"],
assumption+)
apply (simp add:pj_mem)
apply (frule_tac a = x in Ring.qring_zero_1[of "Vr K' v'" _ "vp K' v'"],
assumption+)
apply (subst vp_mem_val_poss[of v], assumption+)
apply (simp add:Vr_mem_f_mem)
apply (frule_tac x = x in Corps.vp_mem_val_poss[of "K'" "v'"],
assumption+, simp add:Corps.Vr_mem_f_mem, simp)
apply (frule_tac x = x in Vr_mem_f_mem[of v], assumption+)
apply (frule_tac x = x in completion_val_eq[of "K'" "v" "v'"],
assumption+, simp)
apply (rule subsetI)
apply (simp add:ker_def)
apply (frule Vr_ring[of "v"])
apply (frule vp_ideal[of "v"])
apply (frule_tac h = x in Ring.ideal_subset[of "Vr K v" "vp K v"],
assumption+, simp)
apply (frule Corps.Vr_ring[of "K'" "v'"], assumption+,
frule Corps.vp_ideal[of "K'" "v'"], assumption+,
simp add:Ring.qring_zero)
apply (simp add:compos_def compose_def idmap_def)
apply (frule completion_Vring_sub[of "K'" "v" "v'"],
assumption+, frule_tac c = x in subsetD[of "carrier (Vr K v)"
"carrier (Vr K' v')"], assumption+)
apply (simp add:pj_mem)
apply (frule completion_vpr_sub[of "K'" "v" "v'"], assumption+,
frule_tac c = x in subsetD[of "vp K v" "vp K' v'"], assumption+)
apply (simp add:Ring.ar_coset_same4[of "Vr K' v'" "vp K' v'"])
done
lemma (in Corps) completion_res_qring_isom:"⟦Corps K'; valuation K v;
valuation K' v'; Completion⇘v v'⇙ K K'⟧ ⟹
r_isom ((Vr K v) /⇩r (vp K v)) ((Vr K' v') /⇩r (vp K' v'))"
apply (subst r_isom_def)
apply (frule res_v_completion_surj[of "K'" "v" "v'"], assumption+)
apply (frule Vr_ring[of "v"],
frule Corps.Vr_ring[of "K'" "v'"], assumption+,
frule Corps.vp_ideal[of "K'" "v'"], assumption+,
frule Ring.qring_ring[of "Vr K' v'" "vp K' v'"], assumption+)
apply (frule rHom_compos[of "Vr K v" "Vr K' v'" "(Vr K' v' /⇩r vp K' v')"
"(I⇘(Vr K v)⇙)" "pj (Vr K' v') (vp K' v')"], assumption+)
apply (simp add:completion_idmap_rHom)
apply (simp add:pj_Hom)
apply (frule surjec_ind_bijec [of "Vr K v" "(Vr K' v' /⇩r vp K' v')"
"compos (Vr K v) (pj (Vr K' v') (vp K' v')) (I⇘(Vr K v)⇙)"], assumption+)
apply (frule ind_hom_rhom[of "Vr K v" "(Vr K' v' /⇩r vp K' v')"
"compos (Vr K v) (pj (Vr K' v') (vp K' v')) (I⇘(Vr K v)⇙)"], assumption+)
apply (simp add:res_v_completion_ker) apply blast
done
text‹expansion of x in a complete field K, with normal valuation v. Here
we suppose t is an element of K satisfying the equation ‹v t = 1›.›
definition
Kxa :: "[_, 'b ⇒ ant, 'b] ⇒ 'b set" where
"Kxa K v x = {y. ∃k∈carrier (Vr K v). y = x ⋅⇩r⇘K⇙ k}"
primrec
partial_sum :: "[('b, 'm) Ring_scheme, 'b, 'b ⇒ ant, 'b]
⇒ nat ⇒ 'b"
("(5psum⇘ _ _ _ _⇙ _)" [96,96,96,96,97]96)
where
psum_0: "psum⇘ K x v t⇙ 0 = (csrp_fn (Vr K v) (vp K v)
(pj (Vr K v) (vp K v) (x ⋅⇩r⇘K⇙ t⇘K⇙⇗-(tna (v x))⇖))) ⋅⇩r⇘K⇙ (t⇘K⇙⇗(tna (v x))⇖)"
| psum_Suc: "psum⇘ K x v t⇙ (Suc n) = (psum⇘ K x v t⇙ n) ±⇘K⇙
((csrp_fn (Vr K v) (vp K v) (pj (Vr K v) (vp K v)
((x ±⇘K⇙ -⇩a⇘K⇙ (psum⇘ K x v t⇙ n)) ⋅⇩r⇘K⇙ (t⇘K⇙⇗- (tna (v x) + int (Suc n))⇖)))) ⋅⇩r⇘K⇙
(t⇘K⇙⇗(tna (v x) + int (Suc n))⇖))"
definition
expand_coeff :: "[_ , 'b ⇒ ant, 'b, 'b]
⇒ nat ⇒ 'b"
("(5ecf⇘_ _ _ _⇙ _)" [96,96,96,96,97]96) where
"ecf⇘K v t x⇙ n = (if n = 0 then csrp_fn (Vr K v) (vp K v)
(pj (Vr K v) (vp K v) (x ⋅⇩r⇘K⇙ t⇘K⇙⇗(-(tna (v x)))⇖))
else csrp_fn (Vr K v) (vp K v) (pj (Vr K v)
(vp K v) ((x ±⇘K⇙ -⇩a⇘K⇙ (psum⇘ K x v t⇙ (n - 1))) ⋅⇩r⇘K⇙ (t⇘K⇙⇗(- (tna (v x) + int n))⇖))))"
definition
expand_term :: "[_, 'b ⇒ ant, 'b, 'b]
⇒ nat ⇒ 'b"
("(5etm⇘ _ _ _ _⇙ _)" [96,96,96,96,97]96) where
"etm⇘K v t x⇙ n = (ecf⇘K v t x⇙ n)⋅⇩r⇘K⇙ (t⇘K⇙⇗(tna (v x) + int n)⇖)"
lemma (in Corps) Kxa_val_ge:"⟦valuation K v; t ∈ carrier K; v t = 1⟧
⟹ Kxa K v (t⇘K⇙⇗j⇖) = {x. x ∈ carrier K ∧ (ant j) ≤ (v x)}"
apply (frule val1_neq_0[of v t], assumption+)
apply (cut_tac field_is_ring)
apply (rule equalityI)
apply (rule subsetI,
simp add:Kxa_def, erule bexE,
frule_tac x = k in Vr_mem_f_mem[of "v"], assumption+,
frule npowf_mem[of "t" "j"], simp,
simp add:Ring.ring_tOp_closed)
apply (simp add:val_t2p) apply (simp add:val_exp[THEN sym])
apply (simp add:val_pos_mem_Vr[THEN sym, of "v"])
apply (frule_tac x = 0 and y = "v k" in aadd_le_mono[of _ _ "ant j"])
apply (simp add:aadd_0_l aadd_commute)
apply (rule subsetI, simp, erule conjE)
apply (simp add:Kxa_def)
apply (case_tac "x = 𝟬⇘K⇙")
apply (frule Vr_ring[of "v"],
frule Ring.ring_zero[of "Vr K v"],
simp add:Vr_0_f_0,
frule_tac x1 = "t⇘K⇙⇗j⇖" in Ring.ring_times_x_0[THEN sym, of "K"],
simp add:npowf_mem, blast)
apply (frule val_exp[of "v" "t" "j"], assumption+, simp)
apply (frule field_potent_nonzero1[of "t" "j"],
frule npowf_mem[of "t" "j"], assumption+)
apply (frule_tac y = "v x" in ale_diff_pos[of "v (t⇘K⇙⇗j⇖)"],
simp add:diff_ant_def)
apply (cut_tac npowf_mem[of t j])
defer
apply assumption apply simp
apply (frule value_of_inv[THEN sym, of "v" "t⇘K⇙⇗j⇖"], assumption+)
apply (cut_tac invf_closed1[of "t⇘K⇙⇗j⇖"], simp, erule conjE)
apply (frule_tac x1 = x in val_t2p[THEN sym, of "v" _ "(t⇘K⇙⇗j⇖)⇗‐K⇖"],
assumption+, simp)
apply (frule_tac x = "(t⇘K⇙⇗j⇖)⇗‐K⇖" and y = x in Ring.ring_tOp_closed[of "K"],
assumption+)
apply (simp add:Ring.ring_tOp_commute[of "K" _ "(t⇘K⇙⇗j⇖)⇗‐K⇖"])
apply (frule_tac x = "((t⇘K⇙⇗j⇖)⇗‐K⇖) ⋅⇩r x" in val_pos_mem_Vr[of v], assumption+,
simp)
apply (frule_tac z = x in Ring.ring_tOp_assoc[of "K" "t⇘K⇙⇗j⇖" "(t⇘K⇙⇗j⇖)⇗‐K⇖"],
assumption+)
apply (simp add:Ring.ring_tOp_commute[of K "t⇘K⇙⇗j⇖" "(t⇘K⇙⇗j⇖)⇗‐ K⇖"] linvf,
simp add:Ring.ring_l_one, blast)
apply simp
done
lemma (in Corps) Kxa_pow_vpr:"⟦ valuation K v; t ∈ carrier K; v t = 1;
(0::int) ≤ j⟧ ⟹ Kxa K v (t⇘K⇙⇗j⇖) = (vp K v)⇗(Vr K v) (ant j)⇖"
apply (frule val_surj_n_val[of v], blast)
apply (simp add:Kxa_val_ge)
apply (rule equalityI)
apply (rule subsetI, simp, erule conjE)
apply (rule_tac x = x in n_value_x_2[of "v" _ "(ant j)"],
assumption+)
apply (cut_tac ale_zle[THEN sym, of "0" "j"])
apply (frule_tac a = "0 ≤ j" and b = "ant 0 ≤ ant j" in a_b_exchange,
assumption+)
apply (thin_tac "(0 ≤ j) = (ant 0 ≤ ant j)", simp add:ant_0)
apply (frule_tac k = "v x" in ale_trans[of "0" "ant j"], assumption+)
apply (simp add:val_pos_mem_Vr) apply simp
apply (simp only:ale_zle[THEN sym, of "0" "j"], simp add:ant_0)
apply (rule subsetI)
apply simp
apply (frule_tac x = x in mem_vp_apow_mem_Vr[of "v" "ant j"])
apply (simp only:ale_zle[THEN sym, of "0" "j"], simp add:ant_0)
apply assumption
apply (simp add:Vr_mem_f_mem[of "v"])
apply (frule_tac x = x in n_value_x_1[of "v" "ant j" _ ])
apply (simp only:ale_zle[THEN sym, of "0" "j"], simp add:ant_0)
apply assumption apply simp
done
lemma (in Corps) field_distribTr:"⟦a ∈ carrier K; b ∈ carrier K;
x ∈ carrier K; x ≠ 𝟬⟧ ⟹ a ± (-⇩a (b ⋅⇩r x)) = (a ⋅⇩r (x⇗‐K⇖) ± (-⇩a b)) ⋅⇩r x"
apply (cut_tac field_is_ring,
cut_tac invf_closed1[of x], simp, erule conjE) apply (
simp add:Ring.ring_inv1_1[of "K" "b" "x"],
frule Ring.ring_is_ag[of "K"],
frule aGroup.ag_mOp_closed[of "K" "b"], assumption+)
apply (frule Ring.ring_tOp_closed[of "K" "a" "x⇗‐K⇖"], assumption+,
simp add:Ring.ring_distrib2, simp add:Ring.ring_tOp_assoc,
simp add:linvf,
simp add:Ring.ring_r_one)
apply simp
done
lemma a0_le_1[simp]:"(0::ant) ≤ 1"
by (cut_tac a0_less_1, simp add:aless_imp_le)
lemma (in Corps) vp_mem_times_t:"⟦valuation K v; t ∈ carrier K; t ≠ 𝟬;
v t = 1; x ∈ vp K v⟧ ⟹ ∃a∈carrier (Vr K v). x = a ⋅⇩r t"
apply (frule Vr_ring[of v],
frule vp_ideal[of v])
apply (frule val_surj_n_val[of v], blast)
apply (frule vp_mem_val_poss[of v x],
frule_tac h = x in Ring.ideal_subset[of "Vr K v" "vp K v"],
assumption+, simp add:Vr_mem_f_mem, simp)
apply (frule gt_a0_ge_1[of "v x"])
apply (subgoal_tac "v t ≤ v x")
apply (thin_tac "1 ≤ v x")
apply (frule val_Rxa_gt_a_1[of "v" "t" "x"])
apply (subst val_pos_mem_Vr[THEN sym, of "v" "t"], assumption+)
apply simp
apply (simp add:vp_mem_Vr_mem) apply assumption+
apply (simp add:Rxa_def, erule bexE)
apply (cut_tac a0_less_1)
apply (subgoal_tac "0 ≤ v t")
apply (frule val_pos_mem_Vr[of "v" "t"], assumption+)
apply (simp, simp add:Vr_tOp_f_tOp, blast, simp+)
done
lemma (in Corps) psum_diff_mem_Kxa:"⟦valuation K v; t ∈ carrier K;
v t = 1; x ∈ carrier K; x ≠ 𝟬⟧ ⟹
(psum⇘ K x v t⇙ n) ∈ carrier K ∧
( x ± (-⇩a (psum⇘ K x v t⇙ n))) ∈ Kxa K v (t⇘K⇙⇗((tna (v x)) + (1 + int n))⇖)"
apply (frule val1_neq_0[of v t], assumption+)
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"],
frule Vr_ring[of v], frule vp_ideal[of v])
apply (induct_tac n)
apply (subgoal_tac "x ⋅⇩r (t⇘K⇙⇗- tna (v x)⇖) ∈ carrier (Vr K v)",
rule conjI, simp, rule Ring.ring_tOp_closed[of "K"], assumption+,
frule Ring.csrp_fn_mem[of "Vr K v" "vp K v"
"pj (Vr K v) (vp K v) (x ⋅⇩r (t⇘K⇙⇗- tna (v x)⇖))"],
assumption+,
simp add:pj_mem Ring.qring_carrier, blast,
simp add:Vr_mem_f_mem, simp add:npowf_mem)
apply (simp,
frule npowf_mem[of "t" "tna (v x)"], assumption+,
frule field_potent_nonzero1[of "t" "tna (v x)"], assumption+,
subst field_distribTr[of "x" _ "t⇘K⇙⇗(tna (v x))⇖"], assumption+,
frule Ring.csrp_fn_mem[of "Vr K v" "vp K v"
"pj (Vr K v) (vp K v) (x ⋅⇩r (t⇘K⇙⇗- tna (v x)⇖))"],
assumption+,
simp add:pj_mem Ring.qring_carrier, blast, simp add:Vr_mem_f_mem,
simp add:npowf_mem, assumption)
apply (frule Ring.csrp_diff_in_vpr[of "Vr K v" "vp K v"
"x ⋅⇩r ((t⇘K⇙⇗(tna (v x))⇖)⇗‐K⇖)"], assumption+)
apply (simp add:npowf_minus)
apply (simp add:npowf_minus)
apply (frule pj_Hom[of "Vr K v" "vp K v"], assumption+)
apply (frule rHom_mem[of "pj (Vr K v) (vp K v)" "Vr K v" "Vr K v /⇩r vp K v"
"x ⋅⇩r (t⇘K⇙⇗- tna (v x)⇖)"], assumption+)
apply (frule Ring.csrp_fn_mem[of "Vr K v" "vp K v"
"pj (Vr K v) (vp K v) (x ⋅⇩r (t⇘K⇙⇗- tna (v x)⇖))"], assumption+)
apply (frule Ring.ring_is_ag[of "Vr K v"],
frule_tac x = "csrp_fn (Vr K v) (vp K v) (pj (Vr K v) (vp K v)
(x ⋅⇩r (t⇘K⇙⇗- tna (v x)⇖)))" in aGroup.ag_mOp_closed[of "Vr K v"], assumption+)
apply (simp add:Vr_pOp_f_pOp) apply (simp add:Vr_mOp_f_mOp)
apply (frule_tac x = "x ⋅⇩r (t⇘K⇙⇗- tna (v x)⇖) ± -⇩a (csrp_fn (Vr K v) (vp K v)
(pj (Vr K v) (vp K v) (x ⋅⇩r (t⇘K⇙⇗- tna (v x)⇖))))" in
vp_mem_times_t[of "v" "t"], assumption+, erule bexE, simp)
apply (frule_tac x = a in Vr_mem_f_mem[of "v"], assumption+)
apply (simp add:Ring.ring_tOp_assoc[of "K"])
apply (simp add:npowf_exp_1_add[THEN sym, of "t" "tna (v x)"])
apply (simp add:add.commute)
apply (simp add:Kxa_def)
apply (frule npowf_mem[of "t" "1 + tna (v x)"], assumption+)
apply (simp add:Ring.ring_tOp_commute[of "K" _ "t⇘K⇙⇗(1 + tna (v x))⇖"])
apply blast
apply (frule npowf_mem[of "t" "- tna (v x)"], assumption+)
apply (frule Ring.ring_tOp_closed[of "K" "x" "t⇘K⇙⇗- tna (v x)⇖"], assumption+)
apply (subst val_pos_mem_Vr[THEN sym, of v], assumption+)
apply (simp add:val_t2p) apply (simp add:val_exp[THEN sym, of "v" "t"])
apply (simp add:aminus[THEN sym])
apply (frule value_in_aug_inf[of "v" "x"], assumption+,
simp add:aug_inf_def)
apply (frule val_nonzero_noninf[of "v" "x"], assumption+,
simp add:ant_tna)
apply (simp add:aadd_minus_r)
apply (erule conjE)
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (rule conjI)
apply simp
apply (rule aGroup.ag_pOp_closed, assumption+)
apply (rule Ring.ring_tOp_closed[of "K"], assumption+)
apply (simp add:Kxa_def, erule bexE, simp)
apply (subst Ring.ring_tOp_commute, assumption+)
apply (rule npowf_mem, assumption+) apply (simp add:Vr_mem_f_mem)
apply (frule_tac n = "tna (v x) + (1 + int n)" in npowf_mem[of t ],
assumption,
frule_tac n = "- tna (v x) + (-1 - int n)" in npowf_mem[of t ],
assumption,
frule_tac x = k in Vr_mem_f_mem[of v], assumption+)
apply (simp add:Ring.ring_tOp_assoc npowf_exp_add[THEN sym, of t])
apply (simp add:field_npowf_exp_zero)
apply (simp add:Ring.ring_r_one)
apply (frule pj_Hom[of "Vr K v" "vp K v"], assumption+)
apply (frule_tac a = k in rHom_mem[of "pj (Vr K v) (vp K v)" "Vr K v"
"Vr K v /⇩r vp K v"], assumption+)
apply (frule_tac x = "pj (Vr K v) (vp K v) k" in Ring.csrp_fn_mem[of "Vr K v"
"vp K v"], assumption+)
apply (simp add:Vr_mem_f_mem)
apply (rule npowf_mem, assumption+)
apply (simp add:Kxa_def) apply (erule bexE, simp)
apply (frule_tac x = k in Vr_mem_f_mem[of "v"], assumption+)
apply (frule_tac n = "tna (v x) + (1 + int n)" in npowf_mem[of "t"],
assumption+)
apply (frule_tac n = "- tna (v x) + (- 1 - int n)" in npowf_mem[of "t"],
assumption+)
apply (frule_tac x = "t⇘K⇙⇗(tna (v x) + (1 + int n))⇖" and y = k in
Ring.ring_tOp_commute[of "K"], assumption+) apply simp
apply (simp add:Ring.ring_tOp_assoc, simp add:npowf_exp_add[THEN sym])
apply (simp add:field_npowf_exp_zero)
apply (simp add:Ring.ring_r_one)
apply (thin_tac "(t⇘K⇙⇗(tna (v x) + (1 + int n))⇖) ⋅⇩r k =
k ⋅⇩r (t⇘K⇙⇗(tna (v x) + (1 + int n))⇖)")
apply (frule pj_Hom[of "Vr K v" "vp K v"], assumption+)
apply (frule_tac a = k in rHom_mem[of "pj (Vr K v) (vp K v)" "Vr K v"
"Vr K v /⇩r vp K v"], assumption+)
apply (frule_tac x = "pj (Vr K v) (vp K v) k" in Ring.csrp_fn_mem[of "Vr K v"
"vp K v"], assumption+)
apply (frule_tac x = "csrp_fn (Vr K v) (vp K v) (pj (Vr K v) (vp K v) k)" in
Vr_mem_f_mem[of v], assumption+)
apply (frule_tac x = "csrp_fn (Vr K v) (vp K v) (pj (Vr K v) (vp K v) k)" and
y = "t⇘K⇙⇗(tna (v x) + (1 + int n))⇖" in Ring.ring_tOp_closed[of "K"], assumption+)
apply (simp add:aGroup.ag_p_inv[of "K"])
apply (frule_tac x = "psum⇘ K x v t⇙ n" in aGroup.ag_mOp_closed[of "K"],
assumption+)
apply (frule_tac x = "(csrp_fn (Vr K v) (vp K v)(pj (Vr K v) (vp K v) k)) ⋅⇩r
(t⇘K⇙⇗(tna (v x) + (1 + int n))⇖)" in aGroup.ag_mOp_closed[of "K"], assumption+)
apply (subst aGroup.ag_pOp_assoc[THEN sym], assumption+)
apply simp
apply (simp add:Ring.ring_inv1_1)
apply (subst Ring.ring_distrib2[THEN sym, of "K"], assumption+)
apply (rule aGroup.ag_mOp_closed, assumption+)
apply (frule_tac x = k in Ring.csrp_diff_in_vpr[of "Vr K v" "vp K v"]
, assumption+)
apply (frule Ring.ring_is_ag[of "Vr K v"])
apply (frule_tac x = "csrp_fn (Vr K v) (vp K v) (pj (Vr K v) (vp K v) k)" in
aGroup.ag_mOp_closed[of "Vr K v"], assumption+)
apply (simp add:Vr_pOp_f_pOp) apply (simp add:Vr_mOp_f_mOp)
apply (frule_tac x = "k ± -⇩a (csrp_fn (Vr K v) (vp K v) (pj (Vr K v) (vp K v)
k))" in vp_mem_times_t[of "v" "t"], assumption+, erule bexE, simp)
apply (frule_tac x = a in Vr_mem_f_mem[of v], assumption+)
apply (simp add:Ring.ring_tOp_assoc[of "K"])
apply (simp add:npowf_exp_1_add[THEN sym, of "t"])
apply (simp add:add.commute[of "2"])
apply (simp add:add.assoc)
apply (subst Ring.ring_tOp_commute, assumption+)
apply (rule npowf_mem, assumption+) apply blast
done
lemma Suc_diff_int:"0 < n ⟹ int (n - Suc 0) = int n - 1"
by (cut_tac of_nat_Suc[of "n - Suc 0"], simp)
lemma (in Corps) ecf_mem:"⟦valuation K v; t ∈ carrier K; v t = 1;
x ∈ carrier K; x ≠ 𝟬 ⟧ ⟹ ecf⇘K v t x⇙ n ∈ carrier K"
apply (frule val1_neq_0[of v t], assumption+)
apply (cut_tac field_is_ring,
frule Vr_ring[of v], frule vp_ideal[of v])
apply (case_tac "n = 0")
apply (simp add:expand_coeff_def)
apply (rule Vr_mem_f_mem[of v], assumption+)
apply (rule Ring.csrp_fn_mem, assumption+)
apply (subgoal_tac "x ⋅⇩r (t⇘K⇙⇗- tna (v x)⇖) ∈ carrier (Vr K v)")
apply (simp add:pj_mem Ring.qring_carrier, blast)
apply (frule npowf_mem[of "t" "- tna (v x)"], assumption+,
subst val_pos_mem_Vr[THEN sym, of v "x ⋅⇩r (t⇘K⇙⇗(- tna(v x))⇖)"],
assumption+,
rule Ring.ring_tOp_closed, assumption+)
apply (simp add:val_t2p,
simp add:val_exp[THEN sym, of "v" "t" "- tna (v x)"])
apply (frule value_in_aug_inf[of "v" "x"], assumption+,
simp add:aug_inf_def)
apply (frule val_nonzero_noninf[of "v" "x"], assumption+)
apply (simp add:aminus[THEN sym], simp add:ant_tna)
apply (simp add:aadd_minus_r)
apply (simp add:expand_coeff_def)
apply (frule psum_diff_mem_Kxa[of "v" "t" "x" "n - 1"],
assumption+, erule conjE)
apply (simp add:Kxa_def, erule bexE,
frule_tac x = k in Vr_mem_f_mem[of v], assumption+,
frule npowf_mem[of "t" "tna (v x) + (1 + int (n - Suc 0))"],
assumption+,
frule npowf_mem[of "t" "-tna (v x) - int n"], assumption+)
apply simp
apply (thin_tac "x ± -⇩a psum⇘ K x v t⇙ (n - Suc 0) =
(t⇘K⇙⇗(tna (v x) + (1 + int (n - Suc 0)))⇖) ⋅⇩r k")
apply(simp add:Ring.ring_tOp_commute[of "K" "t⇘K⇙⇗(tna (v x) + (1 + int (n - Suc 0)))⇖"])
apply (simp add:Ring.ring_tOp_assoc, simp add:npowf_exp_add[THEN sym])
apply (thin_tac "t⇘K⇙⇗(tna (v x) + (1 + int (n - Suc 0)))⇖ ∈ carrier K",
thin_tac "t⇘K⇙⇗(- tna (v x) - int n)⇖ ∈ carrier K")
apply (simp add:Suc_diff_int[of "n"])
apply (simp add:npowf_def, simp add:Ring.ring_r_one)
apply (rule Vr_mem_f_mem, assumption+)
apply (rule Ring.csrp_fn_mem, assumption+)
apply (simp add:pj_mem Ring.qring_carrier, blast)
done
lemma (in Corps) etm_mem:"⟦valuation K v; t ∈ carrier K; v t = 1;
x ∈ carrier K; x ≠ 𝟬⟧ ⟹ etm⇘K v t x⇙ n ∈ carrier K"
apply (frule val1_neq_0[of v t], assumption+)
apply (simp add:expand_term_def)
apply (cut_tac field_is_ring,
rule Ring.ring_tOp_closed[of "K"], assumption)
apply (simp add:ecf_mem)
apply (simp add:npowf_mem)
done
lemma (in Corps) psum_sum_etm:"⟦valuation K v; t ∈ carrier K; v t = 1;
x ∈ carrier K; x ≠ 𝟬⟧ ⟹
psum⇘K x v t⇙ n = nsum K (λj. (ecf⇘K v t x⇙ j)⋅⇩r (t⇘K⇙⇗(tna (v x) + (int j))⇖)) n"
apply (frule val1_neq_0[of v t], assumption+)
apply (induct_tac "n")
apply (simp add:expand_coeff_def)
apply (rotate_tac -1, drule sym)
apply simp
apply (thin_tac "Σ⇩e K (λj. ecf⇘K v t x⇙ j ⋅⇩r t⇘K⇙⇗(tna (v x) + int j)⇖) n =
psum⇘ K x v t⇙ n")
apply (simp add:expand_coeff_def)
done
lemma zabs_pos:"0 ≤ (abs (z::int))"
by (simp add:zabs_def)
lemma abs_p_self_pos:"0 ≤ z + (abs (z::int))"
by (simp add:zabs_def)
lemma zadd_right_mono:"(i::int) ≤ j ⟹ i + k ≤ j + k"
by simp
theorem (in Corps) expansion_thm:"⟦valuation K v; t ∈ carrier K;
v t = 1; x ∈ carrier K; x ≠ 𝟬⟧ ⟹ lim⇘K v ⇙(partial_sum K x v t) x"
apply (cut_tac field_is_ring, frule Ring.ring_is_ag[of "K"])
apply (simp add:limit_def)
apply (rule allI)
apply (subgoal_tac "∀n. (N + na (Abs (v x))) < n ⟶
psum⇘K x v t⇙ n ± -⇩a x ∈ vp K v⇗(Vr K v) (an N)⇖")
apply blast
apply (rule allI, rule impI)
apply (frule_tac n = n in psum_diff_mem_Kxa[of "v" "t" "x"],
assumption+, erule conjE)
apply (frule_tac j = "tna (v x) + (1 + int n)" in Kxa_val_ge[of "v" "t"],
assumption+)
apply simp
apply (thin_tac "Kxa K v (t⇘K⇙⇗(tna (v x) + (1 + int n))⇖) =
{xa ∈ carrier K. ant (tna (v x) + (1 + int n)) ≤ v xa}")
apply (erule conjE)
apply (simp add:a_zpz[THEN sym])
apply (subgoal_tac "(an N) ≤ v (psum⇘ K x v t⇙ n ± -⇩a x)")
apply (frule value_in_aug_inf[of v x], assumption+,
simp add:aug_inf_def)
apply (frule val_nonzero_noninf[of v x], assumption+)
apply (simp add:ant_tna)
apply (frule val_surj_n_val[of v], blast)
apply (rule_tac x = "psum⇘K x v t⇙ n ± -⇩a x" and n = "an N" in
n_value_x_2[of "v"], assumption+)
apply (subst val_pos_mem_Vr[THEN sym, of v], assumption+)
apply (rule aGroup.ag_pOp_closed[of "K"], assumption+)
apply (simp add:aGroup.ag_mOp_closed)
apply (cut_tac n = N in an_nat_pos)
apply (rule_tac i = 0 and j = "an N" and k = "v (psum⇘ K x v t⇙ n ± -⇩a x)" in
ale_trans, assumption+)
apply simp
apply simp
apply (frule_tac x1 = "x ± (-⇩a psum⇘K x v t⇙ n)" in val_minus_eq[THEN sym,
of v], assumption+, simp,
thin_tac "v ( x ± -⇩a psum⇘ K x v t⇙ n) = v (-⇩a ( x ± -⇩a psum⇘ K x v t⇙ n))")
apply (frule_tac x = "psum⇘ K x v t⇙ n" in aGroup.ag_mOp_closed[of "K"],
assumption+, simp add:aGroup.ag_p_inv, simp add:aGroup.ag_inv_inv)
apply (frule aGroup.ag_mOp_closed[of "K" "x"], assumption+)
apply (simp add:aGroup.ag_pOp_commute[of "K" "-⇩a x"])
apply (cut_tac Abs_pos[of "v x"])
apply (frule val_nonzero_z[of v x], assumption+, erule exE, simp)
apply (simp add:na_def)
apply (cut_tac aneg_less[THEN sym, of "0" "Abs (v x)"], simp)
apply (frule val_nonzero_noninf[of v x], assumption+)
apply (simp add:tna_ant)
apply (simp only:ant_1[THEN sym], simp del:ant_1 add:a_zpz)
apply (simp add:add.assoc[THEN sym])
apply (cut_tac m1 = "N + nat ¦z¦" and n1 = n in of_nat_less_iff [where ?'a = int, THEN sym], simp)
apply (frule_tac a = "int N + abs z" and b = "int n" and c = "z + 1" in
add_strict_right_mono, simp only:add.commute)
apply (simp only:add.assoc[of _ "1"])
apply (simp only:add.assoc[THEN sym, of "1"])
apply (simp only:add.commute[of "1"])
apply (simp only:add.assoc[of _ "1"])
apply (cut_tac ?a1 = z and ?b1 = "abs z" and ?c1 = "1 + int N" in
add.assoc[THEN sym])
apply (thin_tac "¦z¦ + int N < int n")
apply (frule_tac a = "z + (¦z¦ + (1 + int N))" and b = "z + ¦z¦ + (1 + int N)" and c = "int n + (z + 1)" in ineq_conv1, assumption+)
apply (thin_tac "z + (¦z¦ + (1 + int N)) < int n + (z + 1)",
thin_tac "z + (¦z¦ + (1 + int N)) = z + ¦z¦ + (1 + int N)",
thin_tac "N + nat ¦z¦ < n")
apply (cut_tac z = z in abs_p_self_pos)
apply (frule_tac i = 0 and j = "z + abs z" and k = "1 + int N" in
zadd_right_mono)
apply (simp only:add_0)
apply (frule_tac i = "1 + int N" and j = "z + ¦z¦ + (1 + int N)" and
k = "int n + (z + 1)" in zle_zless_trans, assumption+)
apply (thin_tac "z + ¦z¦ + (1 + int N) < int n + (z + 1)",
thin_tac "0 ≤ z + ¦z¦",
thin_tac "1 + int N ≤ z + ¦z¦ + (1 + int N)")
apply (cut_tac m1 = "1 + int N" and n1 = "int n + (z + 1)" in
aless_zless[THEN sym], simp)
apply (frule_tac x = "ant (1 + int N)" and y = "ant (int n + (z + 1))"
and z = "v ( psum⇘ K x v t⇙ n ± -⇩a x)" in aless_le_trans, assumption+)
apply (thin_tac "ant (1 + int N) < ant (int n + (z + 1))")
apply (simp add:a_zpz[THEN sym])
apply (frule_tac x = "1 + ant (int N)" and y = "v ( psum⇘ K x v t⇙ n ± -⇩a x)" in
aless_imp_le, thin_tac "1 + ant (int N) < v ( psum⇘ K x v t⇙ n ± -⇩a x)")
apply (cut_tac a0_less_1, frule aless_imp_le[of "0" "1"])
apply (frule_tac b = "ant (int N)" in aadd_pos_le[of "1"])
apply (subst an_def)
apply (rule_tac i = "ant (int N)" and j = "1 + ant (int N)" and
k = "v ( psum⇘ K x v t⇙ n ± -⇩a x)" in ale_trans, assumption+)
done
subsection "Hensel's theorem"
definition
pol_Cauchy_seq :: "[('b, 'm) Ring_scheme, 'b, _, 'b ⇒ ant,
nat ⇒ 'b] ⇒ bool" ("(5PCauchy⇘ _ _ _ _ ⇙_)" [90,90,90,90,91]90) where
"PCauchy⇘R X K v⇙ F ⟷ (∀n. (F n) ∈ carrier R) ∧
(∃d. (∀n. deg R (Vr K v) X (F n) ≤ (an d))) ∧
(∀N. ∃M. (∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X ((vp K v)⇗(Vr K v) (an N)⇖) (F n ±⇘R⇙ -⇩a⇘R⇙ (F m))))"
definition
pol_limit :: "[('b, 'm) Ring_scheme, 'b, _, 'b ⇒ ant,
nat ⇒ 'b, 'b] ⇒ bool"
("(6Plimit⇘ _ _ _ _ ⇙_ _)" [90,90,90,90,90,91]90) where
"Plimit⇘R X K v⇙ F p ⟷ (∀n. (F n) ∈ carrier R) ∧
(∀N. ∃M. (∀m. M < m ⟶
P_mod R (Vr K v) X ((vp K v)⇗(Vr K v) (an N)⇖) ((F m) ±⇘R⇙ -⇩a⇘R⇙ p)))"
definition
Pseql :: "[('b, 'm) Ring_scheme, 'b, _, 'b ⇒ ant, nat,
nat ⇒ 'b] ⇒ nat ⇒ 'b"
("(6Pseql⇘_ _ _ _ _ ⇙_)" [90,90,90,90,90,91]90) where
"Pseql⇘R X K v d⇙ F = (λn. (ldeg_p R (Vr K v) X d (F n)))"
definition
Pseqh :: "[('b, 'm) Ring_scheme, 'b, _, 'b ⇒ ant, nat, nat ⇒ 'b] ⇒
nat ⇒ 'b"
("(6Pseqh⇘ _ _ _ _ _ ⇙_)" [90,90,90,90,90,91]90) where
"Pseqh⇘R X K v d⇙ F = (λn. (hdeg_p R (Vr K v) X (Suc d) (F n)))"
lemma an_neq_minf[simp]:"∀n. -∞ ≠ an n"
apply (rule allI)
apply (simp add:an_def) apply (rule not_sym) apply simp
done
lemma an_neq_minf1[simp]:"∀n. an n ≠ -∞"
apply (rule allI) apply (simp add:an_def)
done
lemma (in Corps) Pseql_mem:"⟦valuation K v; PolynRg R (Vr K v) X;
F n ∈ carrier R; ∀n. deg R (Vr K v) X (F n) ≤ an (Suc d)⟧ ⟹
(Pseql⇘R X K v d⇙ F) n ∈ carrier R"
apply (frule PolynRg.is_Ring)
apply (simp add:Pseql_def)
apply (frule Vr_ring[of "v"],
rule PolynRg.ldeg_p_mem, assumption+, simp)
done
lemma (in Corps) Pseqh_mem:"⟦valuation K v; PolynRg R (Vr K v) X;
F n ∈ carrier R; ∀n. deg R (Vr K v) X (F n) ≤ an (Suc d)⟧ ⟹
(Pseqh⇘R X K v d⇙ F) n ∈ carrier R"
apply (frule PolynRg.is_Ring)
apply (frule Vr_ring[of "v"])
apply (frule PolynRg.subring[of "R" "Vr K v" "X"])
apply (frule PolynRg.X_mem_R[of "R" "Vr K v" "X"])
apply (simp del:npow_suc add:Pseqh_def)
apply (rule PolynRg.hdeg_p_mem, assumption+, simp)
done
lemma (in Corps) PCauchy_lTr:"⟦valuation K v; PolynRg R (Vr K v) X;
p ∈ carrier R; deg R (Vr K v) X p ≤ an (Suc d);
P_mod R (Vr K v) X (vp K v⇗(Vr K v) (an N)⇖) p⟧ ⟹
P_mod R (Vr K v) X (vp K v⇗(Vr K v) (an N)⇖) (ldeg_p R (Vr K v) X d p)"
apply (frule PolynRg.is_Ring)
apply (simp add:ldeg_p_def)
apply (frule Vr_ring[of v])
apply (frule PolynRg.scf_d_pol[of "R" "Vr K v" "X" "p" "Suc d"], assumption+,
(erule conjE)+)
apply (frule_tac n = "an N" in vp_apow_ideal[of v], simp)
apply (frule PolynRg.P_mod_mod[THEN sym, of R "Vr K v" X "vp K v⇗ (Vr K v) (an N)⇖"
p "scf_d R (Vr K v) X p (Suc d)"], assumption+, simp)
apply (subst PolynRg.polyn_expr_short[of R "Vr K v" X
"scf_d R (Vr K v) X p (Suc d)" d], assumption+, simp)
apply (subst PolynRg.P_mod_mod[THEN sym, of R "Vr K v" X "vp K v⇗ (Vr K v) (an N)⇖"
"polyn_expr R X d (d, snd (scf_d R (Vr K v) X p (Suc d)))"
"(d, snd (scf_d R (Vr K v) X p (Suc d)))"], assumption+)
apply (subst PolynRg.polyn_expr_short[THEN sym], simp+,
simp add:PolynRg.polyn_mem)
apply (subst pol_coeff_def, rule allI, rule impI,
simp add:PolynRg.pol_coeff_mem)
apply simp+
done
lemma (in Corps) PCauchy_hTr:"⟦valuation K v; PolynRg R (Vr K v) X;
p ∈ carrier R; deg R (Vr K v) X p ≤ an (Suc d);
P_mod R (Vr K v) X (vp K v⇗(Vr K v) (an N)⇖) p⟧
⟹ P_mod R (Vr K v) X (vp K v⇗(Vr K v) (an N)⇖) (hdeg_p R (Vr K v) X (Suc d) p)"
apply (frule PolynRg.is_Ring)
apply (cut_tac Vr_ring[of v])
apply (frule PolynRg.scf_d_pol[of R "Vr K v" X p "Suc d"], assumption+)
apply (frule_tac n = "an N" in vp_apow_ideal[of v], simp)
apply (frule PolynRg.P_mod_mod[THEN sym, of "R" "Vr K v" "X"
"vp K v⇗ (Vr K v) (an N)⇖" p "scf_d R (Vr K v) X p (Suc d)"], assumption+,
simp+)
apply (subst hdeg_p_def)
apply (subst PolynRg.monomial_P_mod_mod[THEN sym, of "R" "Vr K v" "X"
"vp K v⇗ (Vr K v) (an N)⇖" "snd (scf_d R (Vr K v) X p (Suc d)) (Suc d)"
"(snd (scf_d R (Vr K v) X p (Suc d)) (Suc d)) ⋅⇩r⇘R⇙ (X^⇗R (Suc d)⇖)"
"Suc d"],
assumption+)
apply (rule PolynRg.pol_coeff_mem[of R "Vr K v" X
"scf_d R (Vr K v) X p (Suc d)" "Suc d"], assumption+, simp+)
done
lemma (in Corps) v_ldeg_p_pOp:"⟦valuation K v; PolynRg R (Vr K v) X;
p ∈ carrier R; q ∈ carrier R; deg R (Vr K v) X p ≤ an (Suc d);
deg R (Vr K v) X q ≤ an (Suc d)⟧ ⟹
(ldeg_p R (Vr K v) X d p) ±⇘R⇙ (ldeg_p R (Vr K v) X d q) =
ldeg_p R (Vr K v) X d (p ±⇘R⇙ q)"
by (simp add:PolynRg.ldeg_p_pOp[of R "Vr K v" X p q d])
lemma (in Corps) v_hdeg_p_pOp:"⟦valuation K v; PolynRg R (Vr K v) X;
p ∈ carrier R; q ∈ carrier R; deg R (Vr K v) X p ≤ an (Suc d);
deg R (Vr K v) X q ≤ an (Suc d)⟧ ⟹ (hdeg_p R (Vr K v) X (Suc d) p) ±⇘R⇙
(hdeg_p R (Vr K v) X (Suc d) q) = hdeg_p R (Vr K v) X (Suc d) (p ±⇘R⇙ q)"
by (simp add:PolynRg.hdeg_p_pOp[of R "Vr K v" X p q d])
lemma (in Corps) v_ldeg_p_mOp:"⟦valuation K v; PolynRg R (Vr K v) X;
p ∈ carrier R;deg R (Vr K v) X p ≤ an (Suc d)⟧ ⟹
-⇩a⇘R⇙ (ldeg_p R (Vr K v) X d p) = ldeg_p R (Vr K v) X d (-⇩a⇘R⇙ p)"
by (simp add:PolynRg.ldeg_p_mOp)
lemma (in Corps) v_hdeg_p_mOp:"⟦valuation K v; PolynRg R (Vr K v) X;
p ∈ carrier R;deg R (Vr K v) X p ≤ an (Suc d)⟧ ⟹
-⇩a⇘R⇙ (hdeg_p R (Vr K v) X (Suc d) p) = hdeg_p R (Vr K v) X (Suc d) (-⇩a⇘R⇙ p)"
by (simp add:PolynRg.hdeg_p_mOp)
lemma (in Corps) PCauchy_lPCauchy:"⟦valuation K v; PolynRg R (Vr K v) X;
∀n. F n ∈ carrier R; ∀n. deg R (Vr K v) X (F n) ≤ an (Suc d);
P_mod R (Vr K v) X (vp K v⇗(Vr K v) (an N)⇖) (F n ±⇘R⇙ -⇩a⇘R⇙ (F m))⟧
⟹ P_mod R (Vr K v) X (vp K v⇗(Vr K v) (an N)⇖)
(((Pseql⇘R X K v d⇙ F) n) ±⇘R⇙ -⇩a⇘R⇙ ((Pseql⇘R X K v d⇙ F) m))"
apply (frule PolynRg.is_Ring)
apply (cut_tac Vr_ring[of v],
frule Ring.ring_is_ag[of "R"],
frule PolynRg.subring[of "R" "Vr K v" "X"])
apply (simp add:Pseql_def)
apply (subst v_ldeg_p_mOp[of "v" "R" "X" _ "d"], assumption+,
simp, simp)
apply (subst v_ldeg_p_pOp[of v R X "F n" "-⇩a⇘R⇙ (F m)"], assumption+,
simp, rule aGroup.ag_mOp_closed, assumption, simp, simp,
simp add:PolynRg.deg_minus_eq1)
apply (rule PCauchy_lTr[of v R X "F n ±⇘R⇙ -⇩a⇘R⇙ (F m)" "d" "N"],
assumption+,
rule aGroup.ag_pOp_closed[of "R" "F n" "-⇩a⇘R⇙ (F m)"], assumption+,
simp, rule aGroup.ag_mOp_closed, assumption+, simp)
apply (frule PolynRg.deg_minus_eq1 [of "R" "Vr K v" "X" "F m"], simp)
apply (rule PolynRg.polyn_deg_add4[of "R" "Vr K v" "X" "F n"
"-⇩a⇘R⇙ (F m)" "Suc d"], assumption+, simp,
rule aGroup.ag_mOp_closed, assumption, simp+)
done
lemma (in Corps) PCauchy_hPCauchy:"⟦valuation K v; PolynRg R (Vr K v) X;
∀n. F n ∈ carrier R; ∀n. deg R (Vr K v) X (F n) ≤ an (Suc d);
P_mod R (Vr K v) X (vp K v⇗(Vr K v) (an N)⇖) (F n ±⇘R⇙ -⇩a⇘R⇙ (F m))⟧
⟹ P_mod R (Vr K v) X (vp K v⇗(Vr K v) (an N)⇖)
(((Pseqh⇘R X K v d⇙ F) n) ±⇘R⇙ -⇩a⇘R⇙ ((Pseqh⇘R X K v d⇙ F) m))"
apply (frule PolynRg.is_Ring)
apply (frule Vr_ring[of v], frule Ring.ring_is_ag[of "R"],
frule PolynRg.subring[of "R" "Vr K v" "X"],
frule vp_apow_ideal[of v "an N"], simp)
apply (simp add:Pseqh_def,
subst v_hdeg_p_mOp[of v R X "F m" "d"], assumption+,
simp+)
apply (subst v_hdeg_p_pOp[of v R X "F n" "-⇩a⇘R⇙ (F m)"], assumption+,
simp, rule aGroup.ag_mOp_closed, assumption, simp, simp,
frule PolynRg.deg_minus_eq1 [of "R" "Vr K v" "X" "F m"],
simp+ )
apply (frule PCauchy_hTr[of "v" "R" "X" "F n ±⇘R⇙ -⇩a⇘R⇙ (F m)" "d" "N"],
assumption+,
rule aGroup.ag_pOp_closed[of "R" "F n" "-⇩a⇘R⇙ (F m)"], assumption+,
simp, rule aGroup.ag_mOp_closed, assumption+, simp)
apply (frule PolynRg.deg_minus_eq1 [of "R" "Vr K v" "X" "F m"], simp+)
apply (rule PolynRg.polyn_deg_add4[of "R" "Vr K v" "X" "F n" "-⇩a⇘R⇙ (F m)"
"Suc d"], assumption+,
simp, rule aGroup.ag_mOp_closed, assumption, simp+)
done
lemma (in Corps) Pseq_decompos:"⟦valuation K v; PolynRg R (Vr K v) X;
F n ∈ carrier R; deg R (Vr K v) X (F n) ≤ an (Suc d)⟧
⟹ F n = ((Pseql⇘R X K v d⇙ F) n) ±⇘R⇙ ((Pseqh⇘R X K v d⇙ F) n)"
apply (frule PolynRg.is_Ring)
apply (simp del:npow_suc add:Pseql_def Pseqh_def)
apply (frule Vr_ring[of v])
apply (frule PolynRg.subring[of "R" "Vr K v" "X"])
apply (rule PolynRg.decompos_p[of "R" "Vr K v" "X" "F n" "d"], assumption+)
done
lemma (in Corps) deg_0_const:"⟦valuation K v; PolynRg R (Vr K v) X;
p ∈ carrier R; deg R (Vr K v) X p ≤ 0⟧ ⟹ p ∈ carrier (Vr K v)"
apply (frule Vr_ring[of v])
apply (frule PolynRg.subring)
apply (frule PolynRg.is_Ring)
apply (case_tac "p = 𝟬⇘R⇙", simp,
simp add:Ring.Subring_zero_ring_zero[THEN sym],
simp add:Ring.ring_zero)
apply (subst PolynRg.pol_of_deg0[THEN sym, of "R" "Vr K v" "X" "p"],
assumption+)
apply (simp add:PolynRg.deg_an, simp only:an_0[THEN sym])
apply (simp only:ale_nat_le[of "deg_n R (Vr K v) X p" "0"])
done
lemma (in Corps) monomial_P_limt:"⟦valuation K v; Complete⇘v⇙ K;
PolynRg R (Vr K v) X; ∀n. f n ∈ carrier (Vr K v);
∀n. F n = (f n) ⋅⇩r⇘R⇙ (X^⇗R d⇖); ∀N. ∃M. ∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗(Vr K v) (an N)⇖) (F n ±⇘R⇙ -⇩a⇘R⇙ (F m))⟧ ⟹
∃b∈carrier (Vr K v). Plimit⇘ R X K v ⇙F (b ⋅⇩r⇘R⇙ (X^⇗R d⇖))"
apply (frule PolynRg.is_Ring)
apply (frule Vr_ring[of v])
apply (frule PolynRg.subring[of "R" "Vr K v" "X"])
apply simp
apply (subgoal_tac "Cauchy⇘ K v ⇙f")
apply (simp add:v_complete_def)
apply (drule_tac a = f in forall_spec)
apply (thin_tac "∀N. ∃M. ∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗(Vr K v) (an N)⇖)
((f n) ⋅⇩r⇘R⇙ (X^⇗R d⇖) ±⇘R⇙ -⇩a⇘R⇙ (f m) ⋅⇩r⇘R⇙ (X^⇗R d⇖))", assumption)
apply (erule exE, erule conjE)
apply (subgoal_tac "b ∈ carrier (Vr K v)")
apply (subgoal_tac "Plimit⇘ R X K v ⇙F (b ⋅⇩r⇘R⇙ (X^⇗R d⇖))", blast)
apply (simp add:pol_limit_def)
apply (rule conjI)
apply (rule allI)
apply (rule Ring.ring_tOp_closed[of "R"], assumption)
apply (frule PolynRg.subring[of "R" "Vr K v" "X"])
apply (rule Ring.mem_subring_mem_ring[of "R" "Vr K v"], assumption+)
apply simp
apply (frule PolynRg.X_mem_R[of "R" "Vr K v" "X"])
apply (simp add:Ring.npClose)
apply (thin_tac "∀n. F n = f n ⋅⇩r⇘R⇙ X^⇗R d⇖")
apply (simp add:limit_def)
apply (rule allI)
apply (rotate_tac -2, drule_tac x = N in spec)
apply (erule exE)
apply (subgoal_tac "∀n> M. P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
((f n)⋅⇩r⇘R⇙ (X^⇗R d⇖) ±⇘R⇙ -⇩a⇘R⇙ (b ⋅⇩r⇘R⇙ (X^⇗R d⇖)))", blast)
apply (rule allI, rule impI)
apply (rotate_tac -2, drule_tac x = n in spec, simp)
apply (drule_tac x = n in spec)
apply (frule_tac x = "f n" in Ring.mem_subring_mem_ring[of "R" "Vr K v"],
assumption+,
frule_tac x = b in Ring.mem_subring_mem_ring[of "R" "Vr K v"],
assumption+)
apply (frule PolynRg.X_mem_R[of "R" "Vr K v" "X"])
apply (frule Ring.npClose[of "R" "X" "d"], assumption+)
apply (simp add:Ring.ring_inv1_1)
apply (frule Ring.ring_is_ag[of "R"],
frule_tac x = b in aGroup.ag_mOp_closed[of "R"], assumption+)
apply (subst Ring.ring_distrib2[THEN sym, of "R" "X^⇗R d⇖"], assumption+)
apply (frule_tac n = "an N" in vp_apow_ideal[of v], simp)
apply (frule_tac I = "vp K v⇗ (Vr K v) (an N)⇖" and c = "f n ±⇘R⇙ -⇩a⇘R⇙ b" and
p = "(f n ±⇘R⇙ -⇩a⇘R⇙ b) ⋅⇩r⇘R⇙ (X^⇗R d⇖)" in
PolynRg.monomial_P_mod_mod[of "R" "Vr K v" "X" _ _ _ "d"], assumption+)
apply (simp add:Ring.Subring_minus_ring_minus[THEN sym])
apply (frule Ring.ring_is_ag[of "Vr K v"])
apply (frule_tac x = b in aGroup.ag_mOp_closed[of "Vr K v"], assumption+)
apply (simp only:Ring.Subring_pOp_ring_pOp[THEN sym])
apply (rule aGroup.ag_pOp_closed, assumption+) apply simp
apply (frule_tac I1 = "vp K v⇗ (Vr K v) (an N)⇖" and c1 = "f n ±⇘R⇙ -⇩a⇘R⇙ b" and
p1 = "(f n ±⇘R⇙ -⇩a⇘R⇙ b) ⋅⇩r⇘R⇙ (X^⇗R d⇖)" in PolynRg.monomial_P_mod_mod[THEN sym,
of "R" "Vr K v" "X" _ _ _ "d"], assumption+)
apply (frule Ring.ring_is_ag[of "Vr K v"])
apply (frule_tac x = b in aGroup.ag_mOp_closed[of "Vr K v"], assumption+)
apply (simp only:Ring.Subring_minus_ring_minus[THEN sym])
apply (simp only:Ring.Subring_pOp_ring_pOp[THEN sym])
apply (rule aGroup.ag_pOp_closed, assumption+) apply simp apply simp
apply (simp only:Vr_mOp_f_mOp[THEN sym])
apply (frule Ring.ring_is_ag[of "Vr K v"])
apply (frule_tac x = b in aGroup.ag_mOp_closed[of "Vr K v"], assumption+)
apply (simp add:Vr_pOp_f_pOp[THEN sym])
apply (simp add:Ring.Subring_pOp_ring_pOp)
apply (simp add:Ring.Subring_minus_ring_minus)
apply (case_tac "b = 𝟬⇘K⇙", simp add:Vr_0_f_0[THEN sym],
simp add:Ring.ring_zero)
apply (frule_tac b = b in limit_val[of _ "f" "v"], assumption+,
rule allI,
frule_tac x = j in spec, simp add:Vr_mem_f_mem,
assumption+, erule exE)
apply (thin_tac "∀n. F n = f n ⋅⇩r⇘R⇙ X^⇗R d⇖",
thin_tac "∀N. ∃M. ∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
(f n ⋅⇩r⇘R⇙ X^⇗R d⇖ ±⇘R⇙ -⇩a⇘R⇙ f m ⋅⇩r⇘R⇙ X^⇗R d⇖)")
apply (rotate_tac -1, drule_tac x = "Suc N" in spec, simp)
apply (drule_tac x = "Suc N" in spec)
apply (frule_tac x1 = "f (Suc N)" in val_pos_mem_Vr[THEN sym, of v],
simp add:Vr_mem_f_mem, simp, simp add:val_pos_mem_Vr[of v])
apply (simp add:Cauchy_seq_def)
apply (simp add:Vr_mem_f_mem)
apply (rule allI)
apply (rotate_tac -3, frule_tac x = N in spec)
apply (thin_tac "∀n. F n = f n ⋅⇩r⇘R⇙ X^⇗R d⇖")
apply (frule_tac n = "an N" in vp_apow_ideal[of "v"], simp)
apply (drule_tac x = N in spec, erule exE)
apply (subgoal_tac "∀n m. M < n ∧ M < m ⟶
f n ± -⇩a (f m) ∈ vp K v⇗ (Vr K v) (an N)⇖", blast)
apply (rule allI)+
apply (rule impI, erule conjE)
apply (frule_tac I = "vp K v⇗ (Vr K v) (an N)⇖" and c = "f n ± -⇩a (f m)" and
p = "(f n ± -⇩a (f m)) ⋅⇩r⇘R⇙ (X^⇗R d⇖)" in
PolynRg.monomial_P_mod_mod[of "R" "Vr K v" "X" _ _ _ "d"], assumption+)
apply (frule_tac x = n in spec,
drule_tac x = m in spec)
apply (frule Ring.ring_is_ag[of "Vr K v"],
simp add:Vr_mOp_f_mOp[THEN sym],
frule_tac x = "f m" in aGroup.ag_mOp_closed[of "Vr K v"], assumption+,
simp add:Vr_pOp_f_pOp[THEN sym])
apply (rule aGroup.ag_pOp_closed, assumption+, simp)
apply simp
apply (thin_tac "(f n ± -⇩a f m ∈ vp K v⇗ (Vr K v) (an N)⇖) =
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖) ((f n ± -⇩a f m) ⋅⇩r⇘R⇙ X^⇗R d⇖)")
apply (rotate_tac -3, drule_tac x = n in spec,
rotate_tac -1, drule_tac x = m in spec, simp)
apply (frule_tac x = n in spec,
drule_tac x = m in spec)
apply (frule_tac x = "f n" in Ring.mem_subring_mem_ring[of R "Vr K v"],
assumption+,
frule_tac x = "f m" in Ring.mem_subring_mem_ring[of R "Vr K v"],
assumption+,
frule Ring.ring_is_ag[of R],
frule_tac x = "f m" in aGroup.ag_mOp_closed[of R], assumption+,
frule PolynRg.X_mem_R[of R "Vr K v" X],
frule Ring.npClose[of R X d], assumption)
apply (simp add:Ring.ring_inv1_1[of R],
frule_tac y1 = "f n" and z1 = "-⇩a⇘R⇙ f m" in Ring.ring_distrib2[
THEN sym, of R "X^⇗R d⇖"], assumption+, simp,
thin_tac "f n ⋅⇩r⇘R⇙ X^⇗R d⇖ ±⇘R⇙ (-⇩a⇘R⇙ f m) ⋅⇩r⇘R⇙ X^⇗R d⇖ =
(f n ±⇘R⇙ -⇩a⇘R⇙ f m) ⋅⇩r⇘R⇙ X^⇗R d⇖")
apply (simp only:Ring.Subring_minus_ring_minus[THEN sym,of R "Vr K v"])
apply (frule Ring.subring_Ring[of R "Vr K v"], assumption,
frule Ring.ring_is_ag[of "Vr K v"],
frule_tac x = "f m" in aGroup.ag_mOp_closed[of "Vr K v"], assumption+)
apply (simp add:Ring.Subring_pOp_ring_pOp[THEN sym, of R "Vr K v"],
simp add:Vr_pOp_f_pOp, simp add:Vr_mOp_f_mOp)
done
lemma (in Corps) mPlimit_uniqueTr:"⟦valuation K v;
PolynRg R (Vr K v) X; ∀n. f n ∈ carrier (Vr K v);
∀n. F n = (f n) ⋅⇩r⇘R⇙ (X^⇗R d⇖); c ∈ carrier (Vr K v);
Plimit⇘ R X K v ⇙F (c ⋅⇩r⇘R⇙ (X^⇗R d⇖))⟧ ⟹ lim⇘ K v ⇙f c"
apply (frule PolynRg.is_Ring,
simp add:pol_limit_def limit_def,
rule allI,
erule conjE,
rotate_tac -1, drule_tac x = N in spec,
erule exE)
apply (subgoal_tac "∀n. M < n ⟶ f n ± -⇩a c ∈ vp K v⇗ (Vr K v) (an N)⇖", blast)
apply (rule allI, rule impI,
rotate_tac -2, drule_tac x = n in spec, simp,
drule_tac x = n in spec,
drule_tac x = n in spec,
thin_tac "∀n. f n ⋅⇩r⇘R⇙ X^⇗R d⇖ ∈ carrier R")
apply (frule Vr_ring[of v],
frule PolynRg.X_mem_R[of "R" "Vr K v" "X"],
frule Ring.npClose[of "R" "X" "d"], assumption+,
frule PolynRg.subring[of "R" "Vr K v" "X"])
apply (frule_tac x = c in Ring.mem_subring_mem_ring[of "R" "Vr K v"],
assumption+,
frule_tac x = "f n" in Ring.mem_subring_mem_ring[of "R" "Vr K v"],
assumption+)
apply (simp add:Ring.ring_inv1_1,
frule Ring.ring_is_ag[of "R"],
frule aGroup.ag_mOp_closed[of "R" "c"], assumption+)
apply (simp add:Ring.ring_distrib2[THEN sym, of "R" "X^⇗R d⇖" _ "-⇩a⇘R⇙ c"],
simp add:Ring.Subring_minus_ring_minus[THEN sym],
frule Ring.ring_is_ag[of "Vr K v"],
frule aGroup.ag_mOp_closed[of "Vr K v" "c"], assumption+)
apply (simp add:Ring.Subring_pOp_ring_pOp[THEN sym],
frule_tac x = "f n" in aGroup.ag_pOp_closed[of "Vr K v" _
"-⇩a⇘(Vr K v)⇙ c"], assumption+,
frule_tac n = "an N" in vp_apow_ideal[of "v"], simp,
frule_tac I1 = "vp K v⇗ (Vr K v) (an N)⇖" and
c1 = "f n ±⇘(Vr K v)⇙ -⇩a⇘(Vr K v)⇙ c" and p1 = "(f n ±⇘(Vr K v)⇙ -⇩a⇘(Vr K v)⇙ c)
⋅⇩r⇘R⇙ (X^⇗R d⇖)" in PolynRg.monomial_P_mod_mod[THEN sym, of R "Vr K v"
X _ _ _ d], assumption+, simp, simp)
apply (simp add:Vr_pOp_f_pOp, simp add:Vr_mOp_f_mOp)
done
lemma (in Corps) mono_P_limt_unique:"⟦valuation K v;
PolynRg R (Vr K v) X; ∀n. f n ∈ carrier (Vr K v);
∀n. F n = (f n) ⋅⇩r⇘R⇙ (X^⇗R d⇖); b ∈ carrier (Vr K v); c ∈ carrier (Vr K v);
Plimit⇘ R X K v ⇙F (b ⋅⇩r⇘R⇙ (X^⇗R d⇖)); Plimit⇘ R X K v ⇙F (c ⋅⇩r⇘R⇙ (X^⇗R d⇖))⟧ ⟹
b ⋅⇩r⇘R⇙ (X^⇗R d⇖) = c ⋅⇩r⇘R⇙ (X^⇗R d⇖)"
apply (frule PolynRg.is_Ring)
apply (frule_tac mPlimit_uniqueTr[of v R X f F d b], assumption+,
frule_tac mPlimit_uniqueTr[of v R X f F d c], assumption+)
apply (frule Vr_ring[of v],
frule PolynRg.subring[of "R" "Vr K v" "X"],
frule Vr_mem_f_mem[of v b], assumption+,
frule Vr_mem_f_mem[of v c], assumption+,
frule limit_unique[of b f v c])
apply (rule allI, simp add:Vr_mem_f_mem, assumption+, simp)
done
lemma (in Corps) Plimit_deg:"⟦valuation K v; PolynRg R (Vr K v) X;
∀n. F n ∈ carrier R; ∀n. deg R (Vr K v) X (F n) ≤ (an d);
p ∈ carrier R; Plimit⇘ R X K v ⇙F p⟧ ⟹ deg R (Vr K v) X p ≤ (an d)"
apply (frule PolynRg.is_Ring, frule Vr_ring[of v])
apply (case_tac "p = 𝟬⇘R⇙", simp add:deg_def)
apply (rule contrapos_pp, simp+,
simp add:aneg_le,
frule PolynRg.s_cf_expr[of R "Vr K v" X p], assumption+, (erule conjE)+,
frule PolynRg.s_cf_deg[of R "Vr K v" X p], assumption+,
frule PolynRg.pol_coeff_mem[of R "Vr K v" X "s_cf R (Vr K v) X p"
"fst (s_cf R (Vr K v) X p)"], assumption+, simp,
frule Vr_mem_f_mem[of v "snd (s_cf R (Vr K v) X p)
(fst (s_cf R (Vr K v) X p))"], assumption+)
apply (frule val_nonzero_noninf[of "v"
"snd (s_cf R (Vr K v) X p) (fst (s_cf R (Vr K v) X p))"], assumption,
simp add:Vr_0_f_0,
frule val_pos_mem_Vr[THEN sym, of v "snd (s_cf R (Vr K v) X p)
(fst (s_cf R (Vr K v) X p))"], assumption+, simp,
frule value_in_aug_inf[of "v" "snd (s_cf R (Vr K v) X p)
(fst (s_cf R (Vr K v) X p))"], assumption+,
cut_tac mem_ant[of "v (snd (s_cf R (Vr K v) X p)
(fst (s_cf R (Vr K v) X p)))"], simp add:aug_inf_def,
erule exE, simp, simp only:ant_0[THEN sym], simp only:ale_zle,
frule_tac z = z in zpos_nat, erule exE, simp,
thin_tac "z = int n")
apply (simp add:pol_limit_def)
apply (rotate_tac 5, drule_tac x = "Suc n" in spec)
apply (erule exE)
apply (rotate_tac -1,
drule_tac x = "Suc M" in spec, simp del:npow_suc,
drule_tac x = "Suc M" in spec,
drule_tac x = "Suc M" in spec)
apply (frule PolynRg.polyn_minus[of R "Vr K v" X "s_cf R (Vr K v) X p"
"fst (s_cf R (Vr K v) X p)"], assumption+, simp,
frule PolynRg.minus_pol_coeff[of R "Vr K v" X "s_cf R (Vr K v) X p"],
assumption+, drule sym,
frule_tac x = "deg R (Vr K v) X (F (Suc M))" in ale_less_trans[of _
"an d" "deg R (Vr K v) X p"], assumption+,
frule_tac p = "F (Suc M)" and d = "deg_n R (Vr K v) X p" in
PolynRg.pol_expr_edeg[of "R" "Vr K v" "X"], assumption+,
frule_tac x = "deg R (Vr K v) X (F (Suc M))" and
y = "deg R (Vr K v) X p" in aless_imp_le,
subst PolynRg.deg_an[THEN sym, of "R" "Vr K v" "X" "p"], assumption+,
erule exE, (erule conjE)+,
frule_tac c = f in PolynRg.polyn_add1[of "R" "Vr K v" "X" _
"(fst (s_cf R (Vr K v) X p), λj. -⇩a⇘Vr K v⇙ snd (s_cf R (Vr K v) X p) j)"],
assumption+, simp,
thin_tac "-⇩a⇘R⇙ p = polyn_expr R X (fst (s_cf R (Vr K v) X p))
(fst (s_cf R (Vr K v) X p), λj. -⇩a⇘Vr K v⇙ snd (s_cf R (Vr K v) X p) j)",
thin_tac "polyn_expr R X (fst (s_cf R (Vr K v) X p))
(s_cf R (Vr K v) X p) = p",
thin_tac "F (Suc M) = polyn_expr R X (fst (s_cf R (Vr K v) X p)) f",
thin_tac "polyn_expr R X (fst (s_cf R (Vr K v) X p)) f ±⇘R⇙
polyn_expr R X (fst (s_cf R (Vr K v) X p))
(fst (s_cf R (Vr K v) X p), λj. -⇩a⇘Vr K v⇙ snd (s_cf R (Vr K v) X p) j) =
polyn_expr R X (fst (s_cf R (Vr K v) X p)) (add_cf (Vr K v) f
(fst (s_cf R (Vr K v) X p), λj. -⇩a⇘Vr K v⇙ snd (s_cf R (Vr K v) X p) j))")
apply (frule_tac n = "an (Suc n)" in vp_apow_ideal[of "v"], simp,
frule_tac p1 = "polyn_expr R X (fst (s_cf R (Vr K v) X p))(add_cf (Vr K v) f
(fst (s_cf R (Vr K v) X p), λj. -⇩a⇘Vr K v⇙ snd (s_cf R (Vr K v) X p) j))" and
I1= "vp K v⇗ (Vr K v) (an (Suc n))⇖" and c1 = "add_cf (Vr K v) f (fst
(s_cf R (Vr K v) X p), λj. -⇩a⇘Vr K v⇙ snd (s_cf R (Vr K v) X p) j)" in
PolynRg.P_mod_mod[THEN sym, of R "Vr K v" X], assumption+,
rule PolynRg.polyn_mem[of R "Vr K v" X], assumption+,
rule PolynRg.add_cf_pol_coeff[of R "Vr K v" X], assumption+,
simp add:PolynRg.add_cf_len,
rule PolynRg.add_cf_pol_coeff[of R "Vr K v" X], assumption+,
simp add:PolynRg.add_cf_len,
simp add:PolynRg.add_cf_len)
apply (drule_tac x = "fst (s_cf R (Vr K v) X p)" in spec, simp,
thin_tac "P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an (Suc n))⇖)
(polyn_expr R X (fst (s_cf R (Vr K v) X p)) (add_cf (Vr K v) f
(fst (s_cf R (Vr K v) X p), λj. -⇩a⇘Vr K v⇙ snd (s_cf R (Vr K v) X p) j)))",
simp add:add_cf_def)
apply (frule_tac p = "polyn_expr R X (fst (s_cf R (Vr K v) X p)) f" and
c = f and j = "fst f" in PolynRg.pol_len_gt_deg[of R "Vr K v" X],
assumption+, simp, drule sym, simp add:PolynRg.deg_an) apply simp
apply (rotate_tac -4, drule sym, simp)
apply (frule Ring.ring_is_ag[of "Vr K v"],
frule_tac x = "snd (s_cf R (Vr K v) X p) (fst f)" in
aGroup.ag_mOp_closed[of "Vr K v"], assumption+,
simp add:aGroup.ag_l_zero)
apply (frule_tac I = "vp K v⇗ (Vr K v) (an (Suc n))⇖" and
x = "-⇩a⇘Vr K v⇙ snd (s_cf R (Vr K v) X p) (fst f)" in
Ring.ideal_inv1_closed[of "Vr K v"], assumption+)
apply (simp add:aGroup.ag_inv_inv)
apply (frule_tac n = "an (Suc n)" and x = "snd (s_cf R (Vr K v) X p) (fst f)"
in n_value_x_1[of v], simp+)
apply (frule_tac x = "snd (s_cf R (Vr K v) X p) (fst f)" in
n_val_le_val[of v], assumption+, simp add:ant_int)
apply (drule_tac i = "an (Suc n)" and
j = "n_val K v (snd (s_cf R (Vr K v) X p) (fst f))" and
k = "v (snd (s_cf R (Vr K v) X p) (fst f))" in ale_trans,
assumption+)
apply (simp add:ant_int ale_natle)
done
lemma (in Corps) Plimit_deg1:"⟦valuation K v; Ring R; PolynRg R (Vr K v) X;
∀n. F n ∈ carrier R; ∀n. deg R (Vr K v) X (F n) ≤ ad;
p ∈ carrier R; Plimit⇘ R X K v ⇙F p⟧ ⟹ deg R (Vr K v) X p ≤ ad"
apply (frule Vr_ring[of v])
apply (case_tac "∀n. F n = 𝟬⇘R⇙")
apply (frule Plimit_deg[of v R X F 0 p], assumption+,
rule allI, simp add:deg_def, assumption+)
apply (case_tac "p = 𝟬⇘R⇙", simp add:deg_def,
frule PolynRg.nonzero_deg_pos[of R "Vr K v" X p], assumption+,
simp,
frule PolynRg.pols_const[of "R" "Vr K v" "X" "p"], assumption+,
simp,
frule PolynRg.pols_const[of "R" "Vr K v" "X" "p"], assumption+,
simp add:ale_refl)
apply (subgoal_tac "p = 𝟬⇘R⇙", simp)
apply (thin_tac "p ≠ 𝟬⇘R⇙")
apply (rule contrapos_pp, simp+)
apply (frule n_val_valuation[of v])
apply (frule val_nonzero_z[of "n_val K v" "p"])
apply (simp add:Vr_mem_f_mem)
apply (frule PolynRg.subring[of "R" "Vr K v" "X"])
apply (simp only:Ring.Subring_zero_ring_zero[THEN sym, of "R" "Vr K v"])
apply (simp add:Vr_0_f_0, erule exE)
apply (frule val_pos_mem_Vr[THEN sym, of "v" "p"])
apply (simp add:Vr_mem_f_mem, simp)
apply (frule val_pos_n_val_pos[of "v" "p"])
apply (simp add:Vr_mem_f_mem, simp)
apply (simp add:ant_0[THEN sym])
apply (frule_tac z = z in zpos_nat, erule exE)
apply (unfold pol_limit_def, erule conjE)
apply (rotate_tac -1, drule_tac x = "Suc n" in spec)
apply (subgoal_tac "¬ (∃M. ∀m. M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an (Suc n))⇖) ( F m ±⇘R⇙ -⇩a⇘R⇙ p))")
apply blast
apply (thin_tac "∃M. ∀m. M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an (Suc n))⇖) (F m ±⇘R⇙ -⇩a⇘R⇙ p)")
apply simp
apply (subgoal_tac "M < (Suc M) ∧
¬ P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an (Suc n))⇖) (𝟬⇘R⇙ ±⇘R⇙ -⇩a⇘R⇙ p)")
apply blast
apply simp
apply (frule Ring.ring_is_ag[of "R"])
apply (frule aGroup.ag_mOp_closed[of "R" "p"], assumption)
apply (simp add:aGroup.ag_l_zero)
apply (frule Ring.ring_is_ag[of "Vr K v"])
apply (frule aGroup.ag_mOp_closed[of "Vr K v" "p"], assumption)
apply (frule_tac n = "an (Suc n)" in vp_apow_ideal[of v], simp)
apply (frule PolynRg.subring[of "R" "Vr K v" "X"])
apply (simp add:Ring.Subring_minus_ring_minus[THEN sym, of "R" "Vr K v"])
apply (simp add:PolynRg.P_mod_coeffTr[of "R" "Vr K v" "X" _ "-⇩a⇘(Vr K v)⇙ p"])
apply (rule contrapos_pp, simp+)
apply (frule_tac I = "vp K v⇗ (Vr K v) (an (Suc n))⇖" in
Ring.ideal_inv1_closed[of "Vr K v" _ "-⇩a⇘(Vr K v)⇙ p"], assumption+)
apply (simp add:aGroup.ag_inv_inv)
apply (frule_tac n = "an (Suc n)" in n_value_x_1[of "v" _ "p"], simp)
apply assumption
apply simp
apply (simp add:ant_int, simp add:ale_natle)
apply (fold pol_limit_def)
apply (case_tac "ad = ∞", simp)
apply simp apply (erule exE)
apply (subgoal_tac "0 ≤ ad")
apply (frule Plimit_deg[of "v" "R" "X" "F" "na ad" "p"], assumption+)
apply (simp add:an_na)+
apply (drule_tac x = n in spec,
drule_tac x = n in spec)
apply (frule_tac p = "F n" in PolynRg.nonzero_deg_pos[of "R" "Vr K v" "X"],
assumption+)
apply (rule_tac j = "deg R (Vr K v) X (F n)" in ale_trans[of "0" _ "ad"],
assumption+)
done
lemma (in Corps) Plimit_ldeg:"⟦valuation K v; PolynRg R (Vr K v) X;
∀n. F n ∈ carrier R; p ∈ carrier R;
∀n. deg R (Vr K v) X (F n) ≤ an (Suc d);
Plimit⇘ R X K v ⇙F p⟧ ⟹ Plimit⇘ R X K v ⇙(Pseql⇘ R X K v d ⇙F)
(ldeg_p R (Vr K v) X d p)"
apply (frule Vr_ring[of v], frule PolynRg.is_Ring,
frule Ring.ring_is_ag[of "R"])
apply (frule Plimit_deg[of v R X F "Suc d" p], assumption+)
apply (simp add:Pseql_def, simp add:pol_limit_def)
apply (rule conjI, rule allI)
apply (rule PolynRg.ldeg_p_mem, assumption+, simp+)
apply (rule allI)
apply (rotate_tac -5, drule_tac x = N in spec, erule exE)
apply (subgoal_tac "∀m > M. P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
(ldeg_p R (Vr K v) X d (F m) ±⇘R⇙ -⇩a⇘R⇙ (ldeg_p R (Vr K v) X d p))",
blast)
apply (rule allI, rule impI)
apply (rotate_tac -2,
frule_tac x = m in spec,
thin_tac "∀m. M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖) ( F m ±⇘R⇙ -⇩a⇘R⇙ p)",
simp)
apply (subst v_ldeg_p_mOp[of v R X _ d], assumption+)
apply (subst v_ldeg_p_pOp[of v R X _ "-⇩a⇘R⇙ p"], assumption+)
apply (simp, rule aGroup.ag_mOp_closed, assumption, simp, simp)
apply (frule PolynRg.deg_minus_eq1 [THEN sym, of "R" "Vr K v" "X" "p"],
assumption+)
apply simp
apply (rule_tac p = "F m ±⇘R⇙ -⇩a⇘R⇙ p" and N = N in PCauchy_lTr[of "v"
"R" "X" _ "d" ], assumption+)
apply (rule_tac x = "F m" in aGroup.ag_pOp_closed[of "R" _ "-⇩a⇘R⇙ p"],
assumption+)
apply (simp, rule aGroup.ag_mOp_closed, assumption+)
apply (frule PolynRg.deg_minus_eq1 [of "R" "Vr K v" "X" "p"], assumption+)
apply (rule PolynRg.polyn_deg_add4[of "R" "Vr K v" "X" _ "-⇩a⇘R⇙ p" "Suc d"],
assumption+)
apply (simp, rule aGroup.ag_mOp_closed, assumption, simp+)
done
lemma (in Corps) Plimit_hdeg:"⟦valuation K v; PolynRg R (Vr K v) X;
∀n. F n ∈ carrier R; ∀n. deg R (Vr K v) X (F n) ≤ an (Suc d);
p ∈ carrier R; Plimit⇘ R X K v ⇙F p⟧ ⟹
Plimit⇘ R X K v ⇙(Pseqh⇘ R X K v d ⇙F) (hdeg_p R (Vr K v) X (Suc d) p)"
apply (frule Vr_ring[of "v"], frule PolynRg.is_Ring,
frule Ring.ring_is_ag[of "R"])
apply (frule Plimit_deg[of v R X F "Suc d" p], assumption+)
apply (simp add:Pseqh_def, simp add:pol_limit_def)
apply (rule conjI, rule allI)
apply (rule PolynRg.hdeg_p_mem, assumption+, simp+)
apply (rule allI)
apply (rotate_tac -5, drule_tac x = N in spec)
apply (erule exE)
apply (subgoal_tac "∀m>M. P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
(hdeg_p R (Vr K v) X (Suc d) (F m) ±⇘R⇙ -⇩a⇘R⇙ (hdeg_p R (Vr K v) X (Suc d) p))",
blast)
apply (rule allI, rule impI)
apply (rotate_tac -2,
drule_tac x = m in spec, simp)
apply (subst v_hdeg_p_mOp[of v R X _ d], assumption+)
apply (subst v_hdeg_p_pOp[of v R X _ "-⇩a⇘R⇙ p"], assumption+)
apply (simp, rule aGroup.ag_mOp_closed, assumption, simp, simp)
apply (frule PolynRg.deg_minus_eq1 [THEN sym, of R "Vr K v" X p], assumption+)
apply simp
apply (rule_tac p = "F m ±⇘R⇙ -⇩a⇘R⇙ p" and N = N in PCauchy_hTr[of v R X _ d ],
assumption+)
apply (rule_tac x = "F m" in aGroup.ag_pOp_closed[of R _ "-⇩a⇘R⇙ p"],
assumption+)
apply (simp, rule aGroup.ag_mOp_closed, assumption+)
apply (frule PolynRg.deg_minus_eq1 [of "R" "Vr K v" "X" "p"], assumption+)
apply (rule PolynRg.polyn_deg_add4[of "R" "Vr K v" "X" _ "-⇩a⇘R⇙ p" "Suc d"],
assumption+)
apply (simp, rule aGroup.ag_mOp_closed, assumption, simp+)
done
lemma (in Corps) P_limit_uniqueTr:"⟦valuation K v; PolynRg R (Vr K v) X⟧ ⟹
∀F. ((∀n. F n ∈ carrier R) ∧ (∀n. deg R (Vr K v) X (F n) ≤ (an d)) ⟶
(∀p1 p2. p1 ∈ carrier R ∧ p2 ∈ carrier R ∧ Plimit⇘ R X K v ⇙F p1 ∧
Plimit⇘ R X K v ⇙F p2 ⟶ p1 = p2))"
apply (frule PolynRg.is_Ring)
apply (induct_tac d)
apply (rule allI, rule impI, (rule allI)+, rule impI)
apply (erule conjE)+
apply (subgoal_tac "∀n. F n ∈ carrier (Vr K v)")
apply (frule Vr_ring[of "v"])
apply (frule PolynRg.X_mem_R[of "R" "Vr K v" "X"])
apply (frule_tac f = F and F = F and d = 0 and b = p1 and c = p2 in
mono_P_limt_unique[of v R X], assumption+)
apply (rule allI, drule_tac x = n in spec,
simp add:Ring.ring_r_one)
apply (frule_tac F = F and p = p1 in Plimit_deg[of v R X _ 0],
assumption+, simp add:deg_0_const,
frule_tac F = F and p = p2 in Plimit_deg[of v R X _ 0],
assumption+, simp add:deg_0_const)
apply (simp add:Ring.ring_r_one)+
apply (simp add:deg_0_const)
apply (rename_tac d)
apply (rule allI, rule impI)
apply (erule conjE)
apply ((rule allI)+, rule impI, (erule conjE)+)
apply (frule_tac F = F and p = p1 and d = d in Plimit_ldeg[of v R X],
assumption+,
frule_tac F = F and p = p2 and d = d in Plimit_ldeg[of v R X],
assumption+,
frule_tac F = F and p = p1 and d = d in Plimit_hdeg[of v R X],
assumption+,
frule_tac F = F and p = p2 and d = d in Plimit_hdeg[of v R X],
assumption+)
apply (frule_tac a = "Pseql⇘ R X K v d ⇙F" in forall_spec)
apply (rule conjI)
apply (rule allI)
apply (rule Pseql_mem, assumption+, simp)
apply (rule allI, simp)
apply (rule allI)
apply (subst Pseql_def)
apply (rule_tac p = "F n" and d = d in PolynRg.deg_ldeg_p[of R "Vr K v" X],
assumption+) apply (simp add:Vr_ring)
apply simp
apply (thin_tac "∀F. (∀n. F n ∈ carrier R) ∧
(∀n. deg R (Vr K v) X (F n) ≤ an d) ⟶
(∀p1 p2.
p1 ∈ carrier R ∧
p2 ∈ carrier R ∧
Plimit⇘ R X K v ⇙F p1 ∧ Plimit⇘ R X K v ⇙F p2 ⟶
p1 = p2)")
apply (frule Vr_ring[of v])
apply (frule_tac F = F and d = "Suc d" and p = p1 in
Plimit_deg[of v R X], assumption+,
frule_tac F = F and d = "Suc d" and p = p2 in
Plimit_deg[of v R X], assumption+)
apply (subgoal_tac "(ldeg_p R (Vr K v) X d p1) = (ldeg_p R (Vr K v) X d p2)")
apply (subgoal_tac "hdeg_p R (Vr K v) X (Suc d) p1 =
hdeg_p R (Vr K v) X (Suc d) p2")
apply (frule_tac p = p1 and d = d in PolynRg.decompos_p[of "R" "Vr K v" "X"],
assumption+,
frule_tac p = p2 and d = d in PolynRg.decompos_p[of "R" "Vr K v" "X"],
assumption+)
apply simp
apply (thin_tac "Plimit⇘ R X K v ⇙Pseql⇘ R X K v d ⇙F (ldeg_p R (Vr K v) X d p1)",
thin_tac "Plimit⇘ R X K v ⇙Pseql⇘ R X K v d ⇙F (ldeg_p R (Vr K v) X d p2)",
thin_tac "∀p1 p2. p1 ∈ carrier R ∧ p2 ∈ carrier R ∧
Plimit⇘ R X K v ⇙Pseql⇘ R X K v d ⇙F p1 ∧
Plimit⇘ R X K v ⇙Pseql⇘ R X K v d ⇙F p2 ⟶ p1 = p2")
apply (simp only:hdeg_p_def)
apply (rule_tac f = "λj. snd (scf_d R (Vr K v) X (F j) (Suc d)) (Suc d)"
and F = "Pseqh⇘ R X K v d ⇙F"
and b = "(snd (scf_d R (Vr K v) X p1 (Suc d))) (Suc d)"
and d = "Suc d" and c = "snd (scf_d R (Vr K v) X p2 (Suc d)) (Suc d)" in
mono_P_limt_unique[of v R X], assumption+)
apply (rule allI)
apply (frule_tac p = "F n" and d = "Suc d" in
PolynRg.scf_d_pol[of "R" "Vr K v" "X"])
apply (simp del:npow_suc)+
apply (frule_tac c = "scf_d R (Vr K v) X (F n) (Suc d)" and
j = "Suc d" in PolynRg.pol_coeff_mem[of R "Vr K v" X])
apply simp apply (simp del:npow_suc)+
apply (rule allI)
apply (frule_tac c = "scf_d R (Vr K v) X (F n) (Suc d)" and
j = "Suc d" in PolynRg.pol_coeff_mem[of R "Vr K v" X])
apply (frule_tac p = "F n" and d = "Suc d" in PolynRg.scf_d_pol[of R
"Vr K v" X], (simp del:npow_suc)+)
apply (cut_tac p = "F n" and d = "Suc d" in PolynRg.scf_d_pol[of R
"Vr K v" X], (simp del:npow_suc)+)
apply (subst Pseqh_def) apply (simp only:hdeg_p_def)
apply (frule_tac p = p1 and d = "Suc d" in PolynRg.scf_d_pol[of R "Vr K v" X],
assumption+)
apply (rule_tac c = "scf_d R (Vr K v) X p1 (Suc d)" and
j = "Suc d" in PolynRg.pol_coeff_mem[of R "Vr K v" X], assumption+,
simp, simp)
apply (frule_tac p = p2 and d = "Suc d" in PolynRg.scf_d_pol[of R "Vr K v" X],
assumption+)
apply (rule_tac c = "scf_d R (Vr K v) X p2 (Suc d)" and
j = "Suc d" in PolynRg.pol_coeff_mem[of R "Vr K v" X], assumption+,
simp, simp) apply simp apply simp
apply (rotate_tac -4,
drule_tac x = "ldeg_p R (Vr K v) X d p1" in spec,
rotate_tac -1,
drule_tac x = "ldeg_p R (Vr K v) X d p2" in spec)
apply (simp add:PolynRg.ldeg_p_mem)
done
lemma (in Corps) P_limit_unique:"⟦valuation K v; Complete⇘v⇙ K;
PolynRg R (Vr K v) X; ∀n. F n ∈ carrier R;
∀n. deg R (Vr K v) X (F n) ≤ (an d); p1 ∈ carrier R; p2 ∈ carrier R;
Plimit⇘ R X K v ⇙F p1; Plimit⇘ R X K v ⇙F p2⟧ ⟹ p1 = p2"
apply (frule P_limit_uniqueTr[of "v" "R" "X" "d"], assumption+)
apply blast
done
lemma (in Corps) P_limitTr:"⟦valuation K v; Complete⇘v⇙ K; PolynRg R (Vr K v) X⟧
⟹ ∀F. ((∀n. F n ∈ carrier R) ∧ (∀n. deg R (Vr K v) X (F n) ≤ (an d)) ∧
(∀N. ∃M. ∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖) (F n ±⇘R⇙ -⇩a⇘R⇙ (F m))) ⟶
(∃p∈carrier R. Plimit⇘ R X K v ⇙F p))"
apply (frule PolynRg.is_Ring)
apply (frule Vr_ring[of v])
apply (induct_tac d)
apply simp
apply (rule allI, rule impI, (erule conjE)+)
apply (frule_tac F = F and f = F in monomial_P_limt[of v R X _ _ 0],
assumption+)
apply (rule allI)
apply (rotate_tac 5, drule_tac x = n in spec)
apply (simp add:deg_0_const)
apply (rule allI)
apply (drule_tac x = n in spec,
thin_tac "∀n. deg R (Vr K v) X (F n) ≤ 0")
apply (frule PolynRg.X_mem_R[of "R" "Vr K v" "X"],
frule PolynRg.is_Ring,
simp add:Ring.ring_r_one, assumption)
apply (erule bexE)
apply (frule PolynRg.subring[of "R" "Vr K v" "X"])
apply (cut_tac x = b in Ring.mem_subring_mem_ring[of "R" "Vr K v"])
apply (frule PolynRg.X_mem_R[of "R" "Vr K v" "X"], assumption+)
apply (simp add:Ring.ring_r_one, blast)
apply (rule allI, rule impI) apply (rename_tac d F)
apply (erule conjE)+
apply (subgoal_tac "(∀n.(Pseql⇘ R X K v d ⇙F) n ∈ carrier R) ∧
(∀n. deg R (Vr K v) X ((Pseql⇘ R X K v d ⇙F) n) ≤ an d) ∧
(∀N. ∃M. ∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
((Pseql⇘ R X K v d ⇙F) n ±⇘R⇙ -⇩a⇘R⇙ ((Pseql⇘ R X K v d ⇙F) m)))")
apply (frule_tac a = "Pseql⇘ R X K v d ⇙F" in forall_spec, assumption)
apply (erule bexE)
apply (thin_tac "∀F. (∀n. F n ∈ carrier R) ∧
(∀n. deg R (Vr K v) X (F n) ≤ an d) ∧
(∀N. ∃M. ∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖) (F n ±⇘R⇙ -⇩a⇘R⇙ (F m))) ⟶
(∃p∈carrier R. Plimit⇘ R X K v ⇙F p)",
thin_tac "(∀n. (Pseql⇘ R X K v d ⇙F) n ∈ carrier R) ∧
(∀n. deg R (Vr K v) X ((Pseql⇘ R X K v d ⇙F) n) ≤ an d) ∧
(∀N. ∃M. ∀n m. M < n ∧ M < m ⟶ P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
((Pseql⇘ R X K v d ⇙F) n ±⇘R⇙ -⇩a⇘R⇙ ((Pseql⇘ R X K v d ⇙F) m)))")
apply (subgoal_tac "∀N. ∃M. ∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
((Pseqh⇘R X K v d⇙ F) n ±⇘R⇙ -⇩a⇘R⇙ ((Pseqh⇘R X K v d⇙ F) m))")
apply (frule_tac f = "λj. snd (scf_d R (Vr K v) X (F j) (Suc d)) (Suc d)"
and F = "Pseqh⇘ R X K v d ⇙F" and d = "Suc d" in monomial_P_limt[of v R X],
assumption+)
apply (rule allI)
apply (drule_tac x = n in spec,
drule_tac x = n in spec,
frule_tac p = "F n" and d = "Suc d" in PolynRg.scf_d_pol[of R "Vr K v"
"X"], assumption+, (erule conjE)+)
apply (rule_tac c = "scf_d R (Vr K v) X (F n) (Suc d)" and j = "Suc d" in
PolynRg.pol_coeff_mem[of R "Vr K v" X], assumption+)
apply simp
apply (rule allI)
apply (thin_tac "∀N. ∃M. ∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
( (Pseqh⇘ R X K v d ⇙F) n ±⇘R⇙ -⇩a⇘R⇙ ((Pseqh⇘ R X K v d ⇙F) m))")
apply (simp only:Pseqh_def hdeg_p_def, assumption, erule bexE)
apply (thin_tac "∀N. ∃M. ∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖) (F n ±⇘R⇙ -⇩a⇘R⇙ (F m))",
thin_tac "∀N. ∃M. ∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
((Pseqh⇘ R X K v d ⇙F) n ±⇘R⇙ -⇩a⇘R⇙ ((Pseqh⇘ R X K v d ⇙F) m))")
apply (subgoal_tac "Plimit⇘ R X K v ⇙F (p ±⇘R⇙ b ⋅⇩r⇘R⇙ (X^⇗R (Suc d)⇖))",
subgoal_tac "p ±⇘R⇙ b ⋅⇩r⇘R⇙(X^⇗R (Suc d)⇖) ∈ carrier R", blast)
apply (frule PolynRg.X_mem_R[of "R" "Vr K v" "X"],
frule_tac n = "Suc d" in Ring.npClose[of "R" "X"], assumption+,
frule Ring.ring_is_ag[of "R"],
rule aGroup.ag_pOp_closed[of "R"], assumption+,
rule Ring.ring_tOp_closed, assumption+)
apply (frule PolynRg.subring[of "R" "Vr K v" "X"],
simp add:Ring.mem_subring_mem_ring, assumption)
apply (simp del:npow_suc add:pol_limit_def,
rule allI,
subgoal_tac "∀n. F n = (Pseql⇘ R X K v d ⇙F) n ±⇘R⇙ ((Pseqh⇘ R X K v d ⇙F) n)",
simp del:npow_suc,
subgoal_tac "∀m. (Pseql⇘ R X K v d ⇙F) m ±⇘R⇙ ((Pseqh⇘ R X K v d ⇙F) m) ±⇘R⇙
-⇩a⇘R⇙ (p ±⇘R⇙ (b ⋅⇩r⇘R⇙ (X^⇗R (Suc d)⇖))) = (Pseql⇘ R X K v d ⇙F) m ±⇘R⇙ -⇩a⇘R⇙ p ±⇘R⇙
((Pseqh⇘ R X K v d ⇙F) m ±⇘R⇙ -⇩a⇘R⇙ (b ⋅⇩r⇘R⇙ (X^⇗R (Suc d)⇖)))",
simp del:npow_suc)
apply (thin_tac "∀m. (Pseql⇘R X K v d ⇙F) m ±⇘R⇙ (Pseqh⇘ R X K v d ⇙F) m ±⇘R⇙
-⇩a⇘R⇙ (p ±⇘R⇙ b ⋅⇩r⇘R⇙ X^⇗R (Suc d)⇖) = (Pseql⇘R X K v d ⇙F) m ±⇘R⇙ -⇩a⇘R⇙ p ±⇘R⇙
((Pseqh⇘ R X K v d ⇙F) m ±⇘R⇙ -⇩a⇘R⇙ b ⋅⇩r⇘R⇙ X^⇗R (Suc d)⇖)")
apply (erule conjE)+
apply (rotate_tac -3,
drule_tac x = N in spec, erule exE)
apply (rotate_tac 1,
drule_tac x = N in spec, erule exE)
apply (rename_tac d F p b N M1 M2)
apply (subgoal_tac "∀m. (max M1 M2) < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
((Pseql⇘ R X K v d ⇙F) m ±⇘R⇙ -⇩a⇘R⇙ p ±⇘R⇙
((Pseqh⇘ R X K v d ⇙F) m ±⇘R⇙ -⇩a⇘R⇙ (b ⋅⇩r⇘R⇙ (X^⇗R (Suc d)⇖))))", blast)
apply (rule allI, rule impI)
apply (rotate_tac -2,
drule_tac x = m in spec, simp del:npow_suc)
apply (erule conjE)
apply (rotate_tac -5,
drule_tac x = m in spec, simp del:npow_suc)
apply (frule_tac n = "an N" in vp_apow_ideal[of v], simp del:npow_suc)
apply (frule Ring.ring_is_ag[of "R"])
apply (rule_tac I = "vp K v⇗ (Vr K v) (an N)⇖" and
p = "(Pseql⇘ R X K v d ⇙F) m ±⇘R⇙ -⇩a⇘R⇙ p" and
q = "(Pseqh⇘ R X K v d ⇙F) m ±⇘R⇙ -⇩a⇘R⇙ (b ⋅⇩r⇘R⇙ (X^⇗R (Suc d)⇖))" in
PolynRg.P_mod_add[of R "Vr K v" X], assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+)
apply (simp add:Pseql_mem, rule aGroup.ag_mOp_closed, assumption+)
apply (rule aGroup.ag_pOp_closed[of "R"], assumption)
apply (simp add:Pseqh_mem, rule aGroup.ag_mOp_closed, assumption)
apply (rule Ring.ring_tOp_closed, assumption)
apply (frule PolynRg.subring[of "R" "Vr K v" "X"])
apply (simp add:Ring.mem_subring_mem_ring)
apply (frule PolynRg.X_mem_R[of "R" "Vr K v" "X"])
apply (rule Ring.npClose, assumption+)
apply (rule allI)
apply (thin_tac "∀n.(Pseql⇘ R X K v d ⇙F) n ±⇘R⇙((Pseqh⇘ R X K v d ⇙F) n) ∈ carrier R")
apply (erule conjE)+
apply (thin_tac "∀n. deg R (Vr K v) X
((Pseql⇘R X K v d ⇙F) n ±⇘R⇙ (Pseqh⇘ R X K v d ⇙F) n) ≤ an (Suc d)")
apply (thin_tac "∀N. ∃M. ∀m>M. P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
((Pseql⇘R X K v d ⇙F) m ±⇘R⇙ -⇩a⇘R⇙ p)",
thin_tac "∀N. ∃M. ∀m>M. P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
((Pseqh⇘ R X K v d ⇙F) m ±⇘R⇙ -⇩a⇘R⇙ b ⋅⇩r⇘R⇙ X^⇗R (Suc d)⇖)",
thin_tac "∀n. F n = (Pseql⇘ R X K v d ⇙F) n ±⇘R⇙ ((Pseqh⇘ R X K v d ⇙F) n)")
apply (drule_tac x = m in spec,
drule_tac x = m in spec)
apply (subgoal_tac "b ⋅⇩r⇘R⇙ X^⇗R (Suc d)⇖ ∈ carrier R")
apply (frule Ring.ring_is_ag[of "R"])
apply (frule_tac x = p in aGroup.ag_mOp_closed[of "R"], assumption+)
apply (subst aGroup.ag_pOp_assoc[of "R"], assumption+)
apply (rule aGroup.ag_mOp_closed, assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+)
apply (frule_tac x1 = "-⇩a⇘R⇙ p" and y1 = "(Pseqh⇘ R X K v d ⇙F) m" and z1 =
"-⇩a⇘R⇙ (b ⋅⇩r⇘R⇙ (X^⇗R (Suc d)⇖))" in aGroup.ag_pOp_assoc[THEN sym, of "R"],
assumption+)
apply (rule aGroup.ag_mOp_closed, assumption+, simp del:npow_suc)
apply (subst aGroup.ag_pOp_assoc[THEN sym], assumption+)
apply (rule aGroup.ag_mOp_closed, assumption+,
rule aGroup.ag_pOp_closed, assumption+)
apply (subst aGroup.ag_add4_rel[of R], assumption+)
apply (rule aGroup.ag_mOp_closed, assumption+)
apply (subst aGroup.ag_p_inv[THEN sym, of R], assumption+, simp del:npow_suc)
apply (rule Ring.ring_tOp_closed, assumption+,
frule PolynRg.subring[of R "Vr K v" X],
simp add:Ring.mem_subring_mem_ring,
rule Ring.npClose, assumption+, simp add:PolynRg.X_mem_R)
apply (rule allI)
apply (rule_tac F = F and n = n and d = d in Pseq_decompos[of "v" "R" "X"],
assumption+, simp, simp)
apply (rule allI)
apply (rotate_tac -3, drule_tac x = N in spec)
apply (erule exE)
apply (subgoal_tac "∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
((Pseqh⇘ R X K v d ⇙F) n ±⇘R⇙ -⇩a⇘R⇙ ((Pseqh⇘ R X K v d ⇙F) m))")
apply blast
apply ((rule allI)+, rule impI)
apply (rotate_tac -2,
drule_tac x = n in spec,
rotate_tac -1,
drule_tac x = m in spec,
simp)
apply (simp only: Pseqh_def)
apply (subst v_hdeg_p_mOp[of "v" "R" "X"], assumption+)
apply simp+
apply (frule Ring.ring_is_ag[of "R"])
apply (subst v_hdeg_p_pOp[of "v" "R" "X"], assumption+)
apply (simp, rule aGroup.ag_mOp_closed, assumption, simp, simp,
frule_tac p1 = "F m" in PolynRg.deg_minus_eq1 [THEN sym, of R "Vr K v"
X])
apply simp
apply (rotate_tac -1, frule sym,
thin_tac "deg R (Vr K v) X (F m) = deg R (Vr K v) X (-⇩a⇘R⇙ (F m))", simp)
apply (rule PCauchy_hTr[of v R X], assumption+)
apply (rule_tac x = "F n" and y = "-⇩a⇘R⇙ (F m)" in aGroup.ag_pOp_closed[of "R"],
assumption+,
simp, rule aGroup.ag_mOp_closed, assumption+, simp)
apply (frule_tac p = "F m" in PolynRg.deg_minus_eq1 [of R "Vr K v" X],
simp,
rule_tac p = "F n" and q = "-⇩a⇘R⇙ (F m)" and n = "Suc d" in
PolynRg.polyn_deg_add4[of "R" "Vr K v" "X"], assumption+,
simp, rule aGroup.ag_mOp_closed, assumption, simp+)
apply (rule conjI, rule allI, rule Pseql_mem, assumption+, simp)
apply (rule allI, simp)
apply (thin_tac "∀F. (∀n. F n ∈ carrier R) ∧
(∀n. deg R (Vr K v) X (F n) ≤ an d) ∧
(∀N. ∃M. ∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖) (F n ±⇘R⇙ -⇩a⇘R⇙ (F m))) ⟶
(∃p∈carrier R. Plimit⇘ R X K v ⇙F p)")
apply (rule conjI, rule allI)
apply (subst Pseql_def)
apply (rule_tac p = "F n" and d = d in PolynRg.deg_ldeg_p[of R "Vr K v" X],
assumption+)
apply simp+
apply (simp only: Pseql_def)
apply (rule allI)
apply (rotate_tac -1, drule_tac x = N in spec)
apply (erule exE)
apply (subgoal_tac "∀n m. M < n ∧ M < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
(ldeg_p R (Vr K v) X d (F n) ±⇘R⇙ -⇩a⇘R⇙ (ldeg_p R (Vr K v) X d (F m)))")
apply blast
apply ((rule allI)+, rule impI, erule conjE)
apply (rotate_tac -3, drule_tac x = n in spec,
rotate_tac -1, drule_tac x = m in spec, simp)
apply (subst v_ldeg_p_mOp[of v R X], assumption+, simp+)
apply (frule Ring.ring_is_ag[of "R"])
apply (subst v_ldeg_p_pOp[of v R X], assumption+, simp,
rule aGroup.ag_mOp_closed, assumption, simp, simp,
frule_tac p = "F m" in PolynRg.deg_minus_eq1[of R "Vr K v" X], simp)
apply simp
apply (rule PCauchy_lTr[of v R X], assumption+)
apply (rule_tac x = "F n" and y = "-⇩a⇘R⇙ (F m)" in aGroup.ag_pOp_closed[of R],
assumption+,
simp, rule aGroup.ag_mOp_closed, assumption+, simp)
apply (frule_tac p = "F m" in PolynRg.deg_minus_eq1[of R "Vr K v" X], simp,
rule_tac p = "F n" and q = "-⇩a⇘R⇙ (F m)" and n = "Suc d" in
PolynRg.polyn_deg_add4[of "R" "Vr K v" "X"], assumption+,
simp, rule aGroup.ag_mOp_closed, assumption, simp+)
done
lemma (in Corps) PCauchy_Plimit:"⟦valuation K v; Complete⇘v⇙ K;
PolynRg R (Vr K v) X; PCauchy⇘R X K v⇙ F⟧ ⟹
∃p∈carrier R. Plimit⇘R X K v⇙ F p"
apply (simp add:pol_Cauchy_seq_def)
apply ((erule conjE)+, erule exE)
apply (frule_tac d = d in P_limitTr[of "v" "R" "X"], assumption+)
apply (drule_tac a = F in forall_spec, simp)
apply assumption
done
lemma (in Corps) P_limit_mult:"⟦valuation K v; PolynRg R (Vr K v) X;
∀n. F n ∈ carrier R; ∀n. G n ∈ carrier R; p1 ∈ carrier R; p2 ∈ carrier R;
Plimit⇘ R X K v ⇙F p1; Plimit⇘ R X K v ⇙G p2⟧ ⟹
Plimit⇘ R X K v⇙ (λn. (F n) ⋅⇩r⇘R⇙ (G n)) (p1 ⋅⇩r⇘R⇙ p2)"
apply (frule Vr_ring[of v],
frule PolynRg.is_Ring,
frule Ring.ring_is_ag[of "R"])
apply (simp add:pol_limit_def)
apply (rule conjI)
apply (rule allI)
apply (drule_tac x = n in spec,
drule_tac x = n in spec)
apply (simp add:Ring.ring_tOp_closed[of "R"])
apply (rule allI)
apply (rotate_tac 6,
drule_tac x = N in spec,
drule_tac x = N in spec)
apply (erule exE, erule exE, rename_tac N M1 M2)
apply (subgoal_tac "∀m. (max M1 M2) < m ⟶
P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
((F m) ⋅⇩r⇘R⇙ (G m) ±⇘R⇙ -⇩a⇘R⇙ (p1 ⋅⇩r⇘R⇙ p2))")
apply blast
apply (rule allI, rule impI, simp, erule conjE)
apply (rotate_tac -4,
drule_tac x = m in spec,
drule_tac x = m in spec, simp)
apply (subgoal_tac "(F m) ⋅⇩r⇘R⇙ (G m) ±⇘R⇙ -⇩a⇘R⇙ p1 ⋅⇩r⇘R⇙ p2 =
((F m) ±⇘R⇙ -⇩a⇘R⇙ p1) ⋅⇩r⇘R⇙ (G m) ±⇘R⇙ p1 ⋅⇩r⇘R⇙ ((G m) ±⇘R⇙ -⇩a⇘R⇙ p2)", simp)
apply (frule_tac n = "an N" in vp_apow_ideal[of v])
apply simp
apply (rule_tac I = "vp K v⇗ (Vr K v) (an N)⇖" and
p = "((F m) ±⇘R⇙ -⇩a⇘R⇙ p1) ⋅⇩r⇘R⇙ (G m)" and q = "p1 ⋅⇩r⇘R⇙ ((G m) ±⇘R⇙ -⇩a⇘R⇙ p2)"
in PolynRg.P_mod_add[of R "Vr K v" "X"],
assumption+)
apply (rule Ring.ring_tOp_closed[of "R"], assumption+)
apply (rule aGroup.ag_pOp_closed, assumption) apply simp
apply (rule aGroup.ag_mOp_closed, assumption+) apply simp
apply (rule Ring.ring_tOp_closed[of "R"], assumption+)
apply (rule aGroup.ag_pOp_closed, assumption) apply simp
apply (rule aGroup.ag_mOp_closed, assumption+)
apply (frule Ring.whole_ideal[of "Vr K v"])
apply (frule_tac I = "vp K v⇗ (Vr K v) (an N)⇖" and J = "carrier (Vr K v)" and
p = "F m ±⇘R⇙ -⇩a⇘R⇙ p1" and q = "G m" in PolynRg.P_mod_mult1[of R "Vr K v" X],
assumption+,
rule aGroup.ag_pOp_closed, assumption+, simp, rule aGroup.ag_mOp_closed,
assumption+) apply simp apply assumption
apply (rotate_tac 8,
drule_tac x = m in spec)
apply (case_tac "G m = 𝟬⇘R⇙", simp add:P_mod_def)
apply (frule_tac p = "G m" in PolynRg.s_cf_expr[of R "Vr K v" X], assumption+,
(erule conjE)+)
thm PolynRg.P_mod_mod
apply (frule_tac I1 = "carrier (Vr K v)" and p1 = "G m" and
c1 = "s_cf R (Vr K v) X (G m)" in PolynRg.P_mod_mod[THEN sym,
of R "Vr K v" X], assumption+)
apply (simp,
thin_tac "P_mod R (Vr K v) X (carrier (Vr K v)) (G m) =
(∀j≤fst (s_cf R (Vr K v) X (G m)).
snd (s_cf R (Vr K v) X (G m)) j ∈ carrier (Vr K v))")
apply (rule allI, rule impI)
apply (simp add:PolynRg.pol_coeff_mem)
apply (simp add:Ring.idealprod_whole_r[of "Vr K v"])
apply (cut_tac I = "carrier (Vr K v)" and J = "vp K v⇗ (Vr K v) (an N)⇖" and
p = p1 and q = "G m ±⇘R⇙ -⇩a⇘R⇙ p2" in PolynRg.P_mod_mult1[of R "Vr K v" X],
assumption+)
apply (simp only: Ring.whole_ideal, assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+, simp, rule aGroup.ag_mOp_closed,
assumption+)
apply (frule PolynRg.s_cf_expr0[of R "Vr K v" X p1], assumption+)
thm PolynRg.P_mod_mod
apply (cut_tac I1 = "carrier (Vr K v)" and p1 = p1 and
c1 = "s_cf R (Vr K v) X p1" in PolynRg.P_mod_mod[THEN sym,
of R "Vr K v" X], assumption+)
apply (simp add:Ring.whole_ideal, assumption+)
apply (simp, simp, simp, (erule conjE)+,
thin_tac "P_mod R (Vr K v) X (carrier (Vr K v)) p1 =
(∀j≤fst (s_cf R (Vr K v) X p1).
snd (s_cf R (Vr K v) X p1) j ∈ carrier (Vr K v))")
apply (rule allI, rule impI)
apply (simp add:PolynRg.pol_coeff_mem, assumption)
apply (simp add:Ring.idealprod_whole_l[of "Vr K v"])
apply (drule_tac x = m in spec,
drule_tac x = m in spec)
apply (frule aGroup.ag_mOp_closed[of R p1], assumption,
frule aGroup.ag_mOp_closed[of R p2], assumption )
apply (simp add:Ring.ring_distrib1 Ring.ring_distrib2)
apply (subst aGroup.pOp_assocTr43[of R], assumption+,
(rule Ring.ring_tOp_closed, assumption+)+)
apply (simp add:Ring.ring_inv1_1[THEN sym],
simp add:Ring.ring_inv1_2[THEN sym])
apply (frule_tac x = p1 and y = "G m" in Ring.ring_tOp_closed, assumption+,
frule_tac x = "F m" and y = "G m" in Ring.ring_tOp_closed, assumption+,
simp add:aGroup.ag_l_inv1 aGroup.ag_r_zero)
done
definition
Hfst :: "[_, 'b ⇒ ant, ('b, 'm1) Ring_scheme, 'b,'b, ('b set, 'm2) Ring_scheme, 'b set, 'b, 'b, 'b, nat] ⇒ 'b"
("(11Hfst⇘ _ _ _ _ _ _ _ _ _ _⇙ _)" [67,67,67,67,67,67,67,67,67,67,68]67) where
"Hfst⇘K v R X t S Y f g h⇙ m = fst (Hpr⇘R (Vr K v) X t S Y f g h⇙ m)"
definition
Hsnd :: "[_, 'b ⇒ ant, ('b, 'm1) Ring_scheme, 'b,'b, ('b set, 'm2) Ring_scheme, 'b set, 'b, 'b, 'b, nat] ⇒ 'b"
("(11Hsnd⇘ _ _ _ _ _ _ _ _ _ _⇙ _)" [67,67,67,67,67,67,67,67,67,67,68]67) where
"Hsnd⇘K v R X t S Y f g h⇙ m = snd (Hpr⇘R (Vr K v) X t S Y f g h⇙ m)"
lemma (in Corps) Hensel_starter:"⟦valuation K v; Complete⇘v⇙ K;
PolynRg R (Vr K v) X; PolynRg S ((Vr K v) /⇩r (vp K v)) Y;
t ∈ carrier (Vr K v); vp K v = (Vr K v) ♢⇩p t;
f ∈ carrier R; f ≠ 𝟬⇘R⇙; g' ∈ carrier S; h' ∈ carrier S;
0 < deg S ((Vr K v) /⇩r (vp K v)) Y g';
0 < deg S ((Vr K v) /⇩r (vp K v)) Y h';
((erH R (Vr K v) X S ((Vr K v) /⇩r (vp K v)) Y
(pj (Vr K v) (vp K v))) f) = g' ⋅⇩r⇘S⇙ h';
rel_prime_pols S ((Vr K v) /⇩r (vp K v)) Y g' h'⟧ ⟹
∃g h. g ≠ 𝟬⇘R⇙ ∧ h ≠ 𝟬⇘R⇙ ∧ g ∈ carrier R ∧ h ∈ carrier R ∧
deg R (Vr K v) X g ≤ deg S ((Vr K v) /⇩r ((Vr K v) ♢⇩p t)) Y
(erH R (Vr K v) X S ((Vr K v) /⇩r ((Vr K v) ♢⇩p t)) Y
(pj (Vr K v) ((Vr K v) ♢⇩p t)) g) ∧ (deg R (Vr K v) X h +
deg S ((Vr K v) /⇩r ((Vr K v) ♢⇩p t)) Y (erH R (Vr K v) X S
((Vr K v) /⇩r ((Vr K v) ♢⇩p t)) Y (pj (Vr K v) ((Vr K v) ♢⇩p t)) g)
≤ deg R (Vr K v) X f) ∧
(erH R (Vr K v) X S ((Vr K v) /⇩r (vp K v)) Y
(pj (Vr K v) (vp K v))) g = g' ∧
(erH R (Vr K v) X S ((Vr K v) /⇩r (vp K v)) Y
(pj (Vr K v) (vp K v))) h = h' ∧
0 < deg S ((Vr K v) /⇩r ((Vr K v) ♢⇩p t)) Y
(erH R (Vr K v) X S ((Vr K v) /⇩r ((Vr K v) ♢⇩p t)) Y
(pj (Vr K v) ((Vr K v) ♢⇩p t)) g) ∧
0 < deg S ((Vr K v) /⇩r ((Vr K v) ♢⇩p t)) Y
(erH R (Vr K v) X S ((Vr K v) /⇩r ((Vr K v) ♢⇩p t)) Y
(pj (Vr K v) ((Vr K v) ♢⇩p t)) h) ∧
rel_prime_pols S ((Vr K v) /⇩r ((Vr K v) ♢⇩p t)) Y
(erH R (Vr K v) X S ((Vr K v) /⇩r ((Vr K v) ♢⇩p t)) Y
(pj (Vr K v) ((Vr K v) ♢⇩p t)) g)
(erH R (Vr K v) X S ((Vr K v) /⇩r ((Vr K v) ♢⇩p t)) Y
(pj (Vr K v) ((Vr K v) ♢⇩p t)) h) ∧
P_mod R (Vr K v) X ((Vr K v) ♢⇩p t) (f ±⇘R⇙ -⇩a⇘R⇙ (g ⋅⇩r⇘R⇙ h))"
apply (frule Vr_ring[of v],
frule PolynRg.subring[of R "Vr K v" X],
frule vp_maximal [of v], frule PolynRg.is_Ring,
frule Ring.subring_Ring[of R "Vr K v"], assumption+,
frule Ring.residue_field_cd[of "Vr K v" "vp K v"], assumption+,
frule Corps.field_is_ring[of "Vr K v /⇩r vp K v"],
frule pj_Hom[of "Vr K v" "vp K v"], frule vp_ideal[of "v"],
simp add:Ring.maximal_ideal_ideal)
apply (frule Corps.field_is_idom[of "(Vr K v) /⇩r (vp K v)"],
frule Vr_integral[of v], simp,
frule Vr_mem_f_mem[of v t], assumption+)
apply (frule PolynRg.erH_inv[of R "Vr K v" X "Vr K v ♢⇩p t" S Y "g'"],
assumption+, simp add:Ring.maximal_ideal_ideal,
simp add:PolynRg.is_Ring, assumption+, erule bexE, erule conjE)
apply (frule PolynRg.erH_inv[of R "Vr K v" X "Vr K v ♢⇩p t" S Y "h'"],
assumption+, simp add:Ring.maximal_ideal_ideal,
simp add:PolynRg.is_Ring, assumption+, erule bexE, erule conjE)
apply (rename_tac g0 h0)
apply (subgoal_tac " g0 ≠ 𝟬⇘R⇙ ∧ h0 ≠ 𝟬⇘R⇙ ∧
deg R (Vr K v) X g0 ≤
deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) g0) ∧
deg R (Vr K v) X h0 + deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0) ≤ deg R (Vr K v) X f ∧
0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) g0) ∧
0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) h0) ∧
rel_prime_pols S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0)
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0) ∧
P_mod R (Vr K v) X (Vr K v ♢⇩p t) (f ±⇘R⇙ -⇩a⇘R⇙ g0 ⋅⇩r⇘R⇙ h0)")
apply (thin_tac "g' ∈ carrier S",
thin_tac "h' ∈ carrier S",
thin_tac "0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y g'",
thin_tac "0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y h'",
thin_tac "erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) f = g' ⋅⇩r⇘S⇙ h'",
thin_tac "rel_prime_pols S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y g' h'",
thin_tac "Corps (Vr K v /⇩r (Vr K v ♢⇩p t))",
thin_tac "Ring (Vr K v /⇩r (Vr K v ♢⇩p t))",
thin_tac "vp K v = Vr K v ♢⇩p t")
apply blast
apply (rule conjI)
apply (thin_tac "0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y h'",
thin_tac "erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) f = g' ⋅⇩r⇘S⇙ h'",
thin_tac "rel_prime_pols S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y g' h'",
thin_tac "erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0 = h'",
thin_tac "deg R (Vr K v) X h0 ≤ deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y h'")
apply (rule contrapos_pp, simp+)
apply (simp add:PolynRg.erH_rHom_0[of R "Vr K v" X S
"Vr K v /⇩r (Vr K v ♢⇩p t)" Y "pj (Vr K v) (Vr K v ♢⇩p t)"])
apply (rotate_tac -3, drule sym, simp add:deg_def)
apply (drule aless_imp_le[of "0" "-∞"],
cut_tac minf_le_any[of "0"],
frule ale_antisym[of "0" "-∞"], simp only:ant_0[THEN sym], simp)
apply (rule conjI)
apply (thin_tac "0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y g'",
thin_tac "erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) f = g' ⋅⇩r⇘S⇙ h'",
thin_tac "rel_prime_pols S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y g' h'",
thin_tac "erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0 = g'",
thin_tac "deg R (Vr K v) X h0 ≤ deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y h'")
apply (rule contrapos_pp, simp+,
simp add:PolynRg.erH_rHom_0[of R "Vr K v" X S
"Vr K v /⇩r (Vr K v ♢⇩p t)" Y "pj (Vr K v) (Vr K v ♢⇩p t)"])
apply (rotate_tac -2, drule sym, simp add:deg_def)
apply (frule aless_imp_le[of "0" "-∞"], thin_tac "0 < - ∞",
cut_tac minf_le_any[of "0"],
frule ale_antisym[of "0" "-∞"], simp only:ant_0[THEN sym], simp)
apply (frule_tac x = "deg R (Vr K v) X h0" and
y = "deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y h'" and
z = "deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y g'" in aadd_le_mono)
apply (simp add:PolynRg.deg_mult_pols1[THEN sym, of S
"Vr K v /⇩r (Vr K v ♢⇩p t)" Y "h'" "g'"])
apply (frule PolynRg.is_Ring[of S "Vr K v /⇩r (Vr K v ♢⇩p t)" Y],
simp add:Ring.ring_tOp_commute[of S "h'" "g'"])
apply (rotate_tac 11, drule sym)
apply simp
apply (frule PolynRg.erH_rHom[of R "Vr K v" X S
"(Vr K v) /⇩r (Vr K v ♢⇩p t)" Y "pj (Vr K v) (Vr K v ♢⇩p t)"],
assumption+)
apply (frule PolynRg.pHom_dec_deg[of R "Vr K v" X S "(Vr K v) /⇩r (Vr K v ♢⇩p t)" Y "erH R (Vr K v) X S ((Vr K v) /⇩r (Vr K v ♢⇩p t))
Y (pj (Vr K v) (Vr K v ♢⇩p t))" "f"], assumption+)
apply (frule_tac i = "deg R (Vr K v) X h0 +
deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y g'" in ale_trans[of _
"deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) f)" "deg R (Vr K v) X f"],
assumption+) apply simp
apply (thin_tac "deg R (Vr K v) X h0 +
deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y g' ≤ deg R (Vr K v) X f",
thin_tac "deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) f) ≤ deg R (Vr K v) X f",
thin_tac "0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y g'",
thin_tac "0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y h'",
thin_tac "deg R (Vr K v) X h0 + deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y g'
≤ deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) f)",
thin_tac "rel_prime_pols S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y g' h'")
apply (rotate_tac 12, drule sym)
apply (drule sym)
apply simp
apply (frule_tac x = g0 and y = h0 in Ring.ring_tOp_closed[of "R"],
assumption+)
apply (thin_tac "deg R (Vr K v) X h0 ≤ deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0)",
thin_tac "h' = erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0",
thin_tac "g' = erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0",
thin_tac "deg R (Vr K v) X g0 ≤ deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0)")
apply (subst PolynRg.P_mod_diff[THEN sym, of R "Vr K v" X "Vr K v ♢⇩p t"
S Y f], assumption+) apply (simp add:Ring.maximal_ideal_ideal, assumption+)
apply (rotate_tac 12, drule sym)
apply (subst PolynRg.erH_mult[of R "Vr K v" X S "Vr K v /⇩r (Vr K v ♢⇩p t)"
Y], assumption+)
done
lemma aadd_plus_le_plus:"⟦ a ≤ (a'::ant); b ≤ b'⟧ ⟹ a + b ≤ a' + b'"
apply (frule aadd_le_mono[of "a" "a'" "b"])
apply (frule aadd_le_mono[of "b" "b'" "a'"])
apply (simp add:aadd_commute[of _ "a'"])
done
lemma (in Corps) Hfst_PCauchy:"⟦valuation K v; Complete⇘v⇙ K;
PolynRg R (Vr K v) X; PolynRg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y; g0 ∈ carrier R;
h0 ∈ carrier R; f ∈ carrier R; f ≠ 𝟬⇘R⇙; g0 ≠ 𝟬⇘R⇙; h0 ≠ 𝟬⇘R⇙;
t ∈ carrier (Vr K v); vp K v = Vr K v ♢⇩p t;
deg R (Vr K v) X g0 ≤ deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) g0);
deg R (Vr K v) X h0 + deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) g0)
≤ deg R (Vr K v) X f;
0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) g0);
0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) h0);
rel_prime_pols S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) g0)
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0);
erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) f =
erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0 ⋅⇩r⇘S⇙
erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0⟧ ⟹
PCauchy⇘ R X K v ⇙Hfst K v R X t S Y f g0 h0"
apply(frule Vr_integral[of v], frule vp_ideal[of v],
frule Vr_ring, frule pj_Hom[of "Vr K v" "vp K v"], assumption+,
simp add:PolynRg.erH_mult[THEN sym, of R "Vr K v" X S
"Vr K v /⇩r (Vr K v ♢⇩p t)" Y "pj (Vr K v) (Vr K v ♢⇩p t)" g0 h0],
frule PolynRg.P_mod_diff[THEN sym, of R "Vr K v" X "Vr K v ♢⇩p t" S Y
f "g0 ⋅⇩r⇘R⇙ h0"], assumption+,
frule PolynRg.is_Ring[of R], rule Ring.ring_tOp_closed,
assumption+)
apply (simp add:pol_Cauchy_seq_def, rule conjI)
apply (rule allI)
apply (frule_tac t = t and g = g0 and h = h0 and m = n in
PolynRg.P_mod_diffxxx5_2[of R "Vr K v" X _ S Y f],
rule Vr_integral[of v], assumption+, simp add:vp_gen_nonzero,
drule sym, simp add:vp_maximal, assumption+)
apply (subst Hfst_def)
apply (rule cart_prod_fst, assumption)
apply (rule conjI)
apply (subgoal_tac "∀n. deg R (Vr K v) X (Hfst⇘ K v R X t S Y f g0 h0⇙ n) ≤
an (deg_n R (Vr K v) X f)")
apply blast
apply (rule allI)
apply (frule Vr_integral[of v],
frule_tac t = t and g = g0 and h = h0 and m = n in
PolynRg.P_mod_diffxxx5_4[of R "Vr K v" X _ S Y f], assumption+,
simp add:vp_gen_nonzero,
drule sym, simp add:vp_maximal, assumption+)
apply (subst PolynRg.deg_an[THEN sym], (erule conjE)+, assumption+)
apply (simp add:Hfst_def, (erule conjE)+)
apply (frule_tac i = "deg R (Vr K v) X (fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n))" and
j = "deg R (Vr K v) X g0" and k = "deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0)" in ale_trans, assumption+,
frule PolynRg.nonzero_deg_pos[of R "Vr K v" X h0], assumption+,
frule_tac x = 0 and y = "deg R (Vr K v) X h0" and z = "deg S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0)" in aadd_le_mono, simp add:aadd_0_l)
apply (rule allI)
apply (subgoal_tac "∀n m. N < n ∧ N < m ⟶
P_mod R (Vr K v) X (Vr K v ♢⇩p t⇗ (Vr K v) (an N)⇖)
( Hfst⇘ K v R X t S Y f g0 h0⇙ n ±⇘R⇙ -⇩a⇘R⇙ (Hfst⇘ K v R X t S Y f g0 h0⇙ m))")
apply blast
apply ((rule allI)+, rule impI, (erule conjE)+,
frule Vr_integral[of v], frule vp_gen_nonzero[of v t], assumption+,
frule vp_maximal[of v])
apply (frule_tac t = t and g = g0 and h = h0 and m = n in
PolynRg.P_mod_diffxxx5_2[of R "Vr K v" X _ S Y f], assumption+, simp,
assumption+,
frule_tac t = t and g = g0 and h = h0 and m = m in
PolynRg.P_mod_diffxxx5_2[of R "Vr K v" X _ S Y f], assumption+, simp,
assumption+,
frule_tac t = t and g = g0 and h = h0 and m = N in
PolynRg.P_mod_diffxxx5_2[of R "Vr K v" X _ S Y f], assumption+, simp,
assumption+,
frule_tac x = "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m" in cart_prod_fst[of _
"carrier R" "carrier R"],
frule_tac x = "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N" in cart_prod_fst[of _
"carrier R" "carrier R"],
frule_tac x = "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n" in cart_prod_fst[of _
"carrier R" "carrier R"],
thin_tac "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n ∈ carrier R × carrier R",
thin_tac "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m ∈ carrier R × carrier R")
apply (frule PolynRg.is_Ring)
apply (case_tac "N = 0", simp add:r_apow_def)
apply (rule_tac p = "Hfst⇘ K v R X t S Y f g0 h0⇙ n ±⇘R⇙
-⇩a⇘R⇙ (Hfst⇘ K v R X t S Y f g0 h0⇙ m)" in
PolynRg.P_mod_whole[of "R" "Vr K v" "X"], assumption+,
frule Ring.ring_is_ag[of "R"], simp add:Hfst_def,
rule aGroup.ag_pOp_closed, assumption+, rule aGroup.ag_mOp_closed,
assumption+)
apply (frule_tac t = t and g = g0 and h = h0 and m = N and n = "n - N" in
PolynRg.P_mod_diffxxx5_3[of R "Vr K v" X _ S Y f], assumption+,
simp+, (erule conjE)+,
frule_tac t = t and g = g0 and h = h0 and m = N and n = "m - N" in
PolynRg.P_mod_diffxxx5_3[of R "Vr K v" X _ S Y f], assumption+,
simp, (erule conjE)+,
thin_tac "P_mod R (Vr K v) X (Vr K v ♢⇩p (t^⇗(Vr K v) N⇖)) (snd
(Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N) ±⇘R⇙ -⇩a⇘R⇙ (snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n)))",
thin_tac "P_mod R (Vr K v) X (Vr K v ♢⇩p (t^⇗(Vr K v) N⇖)) (snd
(Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N) ±⇘R⇙ -⇩a⇘R⇙ (snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)))")
apply (frule Vr_ring[of v],
simp only:Ring.principal_ideal_n_pow1[THEN sym],
drule sym, simp, frule vp_ideal[of v],
simp add:Ring.ring_pow_apow,
frule_tac n = "an N" in vp_apow_ideal[of v], simp,
frule Ring.ring_is_ag[of R],
frule_tac x = "fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n)" in
aGroup.ag_mOp_closed[of R], assumption)
apply (frule_tac I = "vp K v⇗ (Vr K v) (an N)⇖" and
p = "(fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N)) ±⇘R⇙
-⇩a⇘R⇙ (fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n))" in PolynRg.P_mod_minus[of R
"Vr K v" X], assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+,
simp add:aGroup.ag_p_inv aGroup.ag_inv_inv)
apply (frule Ring.ring_is_ag,
frule_tac x = "-⇩a⇘R⇙ fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N)" and
y = "fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n)" in aGroup.ag_pOp_commute)
apply(rule aGroup.ag_mOp_closed, assumption+, simp,
thin_tac "-⇩a⇘R⇙ fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N) ±⇘R⇙
fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n) = fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n) ±⇘R⇙
-⇩a⇘R⇙ fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N)")
apply (frule_tac I = "vp K v⇗ (Vr K v) (an N)⇖" and
p = "fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n) ±⇘R⇙
-⇩a⇘R⇙ fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N)" and
q = "fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N) ±⇘R⇙
-⇩a⇘R⇙ fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)" in PolynRg.P_mod_add[of
R "Vr K v" X], assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+)
apply (frule_tac x = "fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N)" in
aGroup.ag_mOp_closed, assumption+,
frule_tac x = "fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)" in
aGroup.ag_mOp_closed, assumption+,
simp add:aGroup.pOp_assocTr43[of R] aGroup.ag_l_inv1 aGroup.ag_r_zero)
apply (simp add:Hfst_def)
done
lemma (in Corps) Hsnd_PCauchy:"⟦valuation K v; Complete⇘v⇙ K;
PolynRg R (Vr K v) X; PolynRg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y; g0 ∈ carrier R;
h0 ∈ carrier R; f ∈ carrier R; f ≠ 𝟬⇘R⇙; g0 ≠ 𝟬⇘R⇙; h0 ≠ 𝟬⇘R⇙;
t ∈ carrier (Vr K v); vp K v = Vr K v ♢⇩p t;
deg R (Vr K v) X g0 ≤ deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) g0);
deg R (Vr K v) X h0 + deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) g0)
≤ deg R (Vr K v) X f;
0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) g0);
0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) h0);
rel_prime_pols S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (pj (Vr K v) (Vr K v ♢⇩p t)) g0)
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0);
erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) f =
erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0 ⋅⇩r⇘S⇙
erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0⟧ ⟹
PCauchy⇘ R X K v ⇙Hsnd K v R X t S Y f g0 h0"
apply(frule Vr_integral[of v], frule vp_ideal[of v],
frule Vr_ring, frule pj_Hom[of "Vr K v" "vp K v"], assumption+,
simp add:PolynRg.erH_mult[THEN sym, of R "Vr K v" X S
"Vr K v /⇩r (Vr K v ♢⇩p t)" Y "pj (Vr K v) (Vr K v ♢⇩p t)" g0 h0],
frule PolynRg.P_mod_diff[THEN sym, of R "Vr K v" X "Vr K v ♢⇩p t" S Y
f "g0 ⋅⇩r⇘R⇙ h0"], assumption+,
frule PolynRg.is_Ring[of R], rule Ring.ring_tOp_closed,
assumption+)
apply (simp add:pol_Cauchy_seq_def, rule conjI)
apply (rule allI)
apply (frule_tac t = t and g = g0 and h = h0 and m = n in
PolynRg.P_mod_diffxxx5_2[of R "Vr K v" X _ S Y f],
rule Vr_integral[of v], assumption+, simp add:vp_gen_nonzero,
drule sym, simp add:vp_maximal, assumption+)
apply (subst Hsnd_def)
apply (rule cart_prod_snd, assumption)
apply (rule conjI)
apply (subgoal_tac "∀n. deg R (Vr K v) X (Hsnd⇘ K v R X t S Y f g0 h0⇙ n) ≤
an (deg_n R (Vr K v) X f)")
apply blast
apply (rule allI)
apply (frule Vr_integral[of v],
frule_tac t = t and g = g0 and h = h0 and m = n in
PolynRg.P_mod_diffxxx5_4[of R "Vr K v" X _ S Y f], assumption+,
simp add:vp_gen_nonzero,
drule sym, simp add:vp_maximal, assumption+)
apply (subst PolynRg.deg_an[THEN sym], (erule conjE)+, assumption+)
apply (simp add:Hsnd_def)
apply (rule allI)
apply (subgoal_tac "∀n m. N < n ∧ N < m ⟶
P_mod R (Vr K v) X (Vr K v ♢⇩p t⇗ (Vr K v) (an N)⇖)
( Hsnd⇘ K v R X t S Y f g0 h0⇙ n ±⇘R⇙ -⇩a⇘R⇙ (Hsnd⇘ K v R X t S Y f g0 h0⇙ m))")
apply blast
apply ((rule allI)+, rule impI, (erule conjE)+)
apply (frule Vr_integral[of v], frule vp_gen_nonzero[of v t], assumption+)
apply (frule vp_maximal[of v])
apply (frule_tac t = t and g = g0 and h = h0 and m = n in
PolynRg.P_mod_diffxxx5_2[of R "Vr K v" X _ S Y f], assumption+, simp,
assumption+)
apply (frule_tac t = t and g = g0 and h = h0 and m = m in
PolynRg.P_mod_diffxxx5_2[of R "Vr K v" X _ S Y f], assumption+, simp,
assumption+,
frule_tac t = t and g = g0 and h = h0 and m = N in
PolynRg.P_mod_diffxxx5_2[of R "Vr K v" X _ S Y f], assumption+, simp,
assumption+,
frule_tac x = "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m" in cart_prod_snd[of _
"carrier R" "carrier R"],
frule_tac x = "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N" in cart_prod_snd[of _
"carrier R" "carrier R"],
frule_tac x = "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n" in cart_prod_snd[of _
"carrier R" "carrier R"],
thin_tac "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n ∈ carrier R × carrier R",
thin_tac "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m ∈ carrier R × carrier R")
apply (frule PolynRg.is_Ring)
apply (case_tac "N = 0", simp add:r_apow_def)
apply (rule_tac p = "Hsnd⇘ K v R X t S Y f g0 h0⇙ n ±⇘R⇙
-⇩a⇘R⇙ (Hsnd⇘ K v R X t S Y f g0 h0⇙ m)" in
PolynRg.P_mod_whole[of "R" "Vr K v" "X"], assumption+,
frule Ring.ring_is_ag[of "R"], simp add:Hsnd_def,
rule aGroup.ag_pOp_closed, assumption+, rule aGroup.ag_mOp_closed,
assumption+)
apply (frule_tac t = t and g = g0 and h = h0 and m = N and n = "n - N" in
PolynRg.P_mod_diffxxx5_3[of R "Vr K v" X _ S Y f], assumption+)
apply simp+
apply (erule conjE)+
apply (frule_tac t = t and g = g0 and h = h0 and m = N and n = "m - N" in
PolynRg.P_mod_diffxxx5_3[of R "Vr K v" X _ S Y f], assumption+)
apply simp apply (erule conjE)+
apply (thin_tac "P_mod R (Vr K v) X (Vr K v ♢⇩p (t^⇗(Vr K v) N⇖)) (fst
(Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N) ±⇘R⇙ -⇩a⇘R⇙ (fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n)))",
thin_tac "P_mod R (Vr K v) X (Vr K v ♢⇩p (t^⇗(Vr K v) N⇖)) (fst
(Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N) ±⇘R⇙ -⇩a⇘R⇙ (fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)))")
apply (frule Vr_ring[of v])
apply (simp only:Ring.principal_ideal_n_pow1[THEN sym])
apply (drule sym, simp, frule vp_ideal[of v])
apply (simp add:Ring.ring_pow_apow,
frule_tac n = "an N" in vp_apow_ideal[of v], simp,
frule Ring.ring_is_ag[of R],
frule_tac x = "snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n)" in
aGroup.ag_mOp_closed[of R], assumption)
apply (frule_tac I = "vp K v⇗ (Vr K v) (an N)⇖" and
p = "(snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N)) ±⇘R⇙
-⇩a⇘R⇙ (snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n))" in PolynRg.P_mod_minus[of R
"Vr K v" X], assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+,
simp add:aGroup.ag_p_inv aGroup.ag_inv_inv)
apply (frule Ring.ring_is_ag,
frule_tac x = "-⇩a⇘R⇙ snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N)" and
y = "snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n)" in aGroup.ag_pOp_commute)
apply(rule aGroup.ag_mOp_closed, assumption+, simp,
thin_tac "-⇩a⇘R⇙ snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N) ±⇘R⇙
snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n) = snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n) ±⇘R⇙
-⇩a⇘R⇙ snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N)")
apply (frule_tac I = "vp K v⇗ (Vr K v) (an N)⇖" and
p = "snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n) ±⇘R⇙
-⇩a⇘R⇙ snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N)" and
q = "snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N) ±⇘R⇙
-⇩a⇘R⇙ snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)" in PolynRg.P_mod_add[of
R "Vr K v" X], assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+)
apply (rule aGroup.ag_pOp_closed, assumption+,
rule aGroup.ag_mOp_closed, assumption+)
apply (frule_tac x = "snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ N)" in
aGroup.ag_mOp_closed, assumption+,
frule_tac x = "snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)" in
aGroup.ag_mOp_closed, assumption+,
simp add:aGroup.pOp_assocTr43[of R] aGroup.ag_l_inv1 aGroup.ag_r_zero)
apply (simp add:Hsnd_def)
done
lemma (in Corps) H_Plimit_f:"⟦valuation K v; Complete⇘v⇙ K;
t ∈ carrier (Vr K v); vp K v = Vr K v ♢⇩p t;
PolynRg R (Vr K v) X; PolynRg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y;
f ∈ carrier R; f ≠ 𝟬⇘R⇙; g0 ∈ carrier R; h0 ∈ carrier R; g0 ≠ 𝟬⇘R⇙;
h0 ≠ 𝟬⇘R⇙;
0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0);
0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0);
deg R (Vr K v) X h0 +
deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0) ≤ deg R (Vr K v) X f;
rel_prime_pols S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0)
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0);
erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) f =
erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0 ⋅⇩r⇘S⇙
erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0;
deg R (Vr K v) X g0
≤ deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0);
g ∈ carrier R; h ∈ carrier R;
Plimit⇘ R X K v ⇙(Hfst K v R X t S Y f g0 h0) g;
Plimit⇘ R X K v ⇙(Hsnd K v R X t S Y f g0 h0) h;
Plimit⇘ R X K v ⇙(λn. (Hfst⇘ K v R X t S Y f g0 h0⇙ n) ⋅⇩r⇘R⇙
(Hsnd⇘ K v R X t S Y f g0 h0⇙ n)) (g ⋅⇩r⇘R⇙ h)⟧
⟹ Plimit⇘ R X K v ⇙(λn. (Hfst⇘ K v R X t S Y f g0 h0⇙ n) ⋅⇩r⇘R⇙
(Hsnd⇘ K v R X t S Y f g0 h0⇙ n)) f"
apply(frule Vr_integral[of v], frule vp_ideal[of v],
frule Vr_ring, frule pj_Hom[of "Vr K v" "vp K v"], assumption+,
simp add:PolynRg.erH_mult[THEN sym, of R "Vr K v" X S
"Vr K v /⇩r (Vr K v ♢⇩p t)" Y "pj (Vr K v) (Vr K v ♢⇩p t)" g0 h0])
apply(frule PolynRg.P_mod_diff[of R "Vr K v" X "Vr K v ♢⇩p t" S Y
f "g0 ⋅⇩r⇘R⇙ h0"], assumption+,
frule PolynRg.is_Ring[of R], rule Ring.ring_tOp_closed,
assumption+, simp)
apply (simp add:PolynRg.erH_mult[of R "Vr K v" X S
"Vr K v /⇩r (Vr K v ♢⇩p t)" Y "pj (Vr K v) (Vr K v ♢⇩p t)" g0 h0])
apply (frule PolynRg.is_Ring[of R])
apply (frule Hfst_PCauchy[of v R X S t Y g0 h0 f], assumption+,
frule Hsnd_PCauchy[of v R X S t Y g0 h0 f], assumption+)
apply (subst pol_limit_def)
apply (rule conjI)
apply (rule allI)
apply (rule Ring.ring_tOp_closed, assumption)
apply (simp add:pol_Cauchy_seq_def, simp add:pol_Cauchy_seq_def)
apply (rule allI)
apply (subgoal_tac "∀m>N. P_mod R (Vr K v) X (vp K v⇗ (Vr K v) (an N)⇖)
((Hfst⇘ K v R X t S Y f g0 h0⇙ m) ⋅⇩r⇘R⇙ (Hsnd⇘ K v R X t S Y f g0 h0⇙ m)
±⇘R⇙ -⇩a⇘R⇙ f)")
apply blast
apply (rule allI, rule impI, frule Vr_integral[of v])
apply (frule_tac t = t and g = g0 and h = h0 and m = "m - Suc 0" in
PolynRg.P_mod_diffxxx5_1[of R "Vr K v" X _ S Y], assumption+,
simp add:vp_gen_nonzero[of v],
frule vp_maximal[of v], simp, assumption+)
apply ((erule conjE)+, simp del:npow_suc Hpr_Suc)
apply (frule Ring.ring_is_ag[of "R"])
apply (thin_tac "0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0)",
thin_tac "0 < deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0)",
thin_tac "rel_prime_pols S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0)
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0)",
thin_tac "P_mod R (Vr K v) X (Vr K v ♢⇩p t) ( f ±⇘R⇙ -⇩a⇘R⇙ g0 ⋅⇩r⇘R⇙ h0)",
thin_tac "erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) f =
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0) ⋅⇩r⇘S⇙
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0)",
thin_tac "deg R (Vr K v) X g0 ≤ deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0)",
thin_tac "deg R (Vr K v) X h0 + deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0) ≤ deg R (Vr K v) X f",
thin_tac "erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) (fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)) =
erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0",
thin_tac "erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) (snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)) =
erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0",
thin_tac "deg R (Vr K v) X (fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m))
≤ deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0)",
thin_tac "P_mod R (Vr K v) X (Vr K v ♢⇩p (t^⇗(Vr K v) m⇖))
( fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ (m - Suc 0)) ±⇘R⇙
-⇩a⇘R⇙ (fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)))",
thin_tac "deg R (Vr K v) X (snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)) +
deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0) ≤ deg R (Vr K v) X f",
thin_tac "P_mod R (Vr K v) X (Vr K v ♢⇩p (t^⇗(Vr K v) m⇖))
(snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ (m - Suc 0)) ±⇘R⇙
-⇩a⇘R⇙ (snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)))")
apply (case_tac "N = 0", simp add:r_apow_def)
apply (rule_tac p = "(Hfst⇘ K v R X t S Y f g0 h0⇙ m) ⋅⇩r⇘R⇙ (Hsnd⇘ K v R X t S Y f g0 h0⇙ m)
±⇘R⇙ -⇩a⇘R⇙ f" in PolynRg.P_mod_whole[of R "Vr K v" X], assumption+)
apply (simp add:Hfst_def Hsnd_def)
apply (frule_tac x = "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m" in cart_prod_fst[of _ "carrier R" "carrier R"])
apply (frule_tac x = "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m" in cart_prod_snd[of _
"carrier R" "carrier R"])
apply (frule Ring.ring_is_ag[of R],
rule aGroup.ag_pOp_closed, assumption)
apply (rule Ring.ring_tOp_closed, assumption+)
apply (rule aGroup.ag_mOp_closed, assumption+)
apply (frule_tac g = "f ±⇘R⇙ -⇩a⇘R⇙ (fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)) ⋅⇩r⇘R⇙
(snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m))" and m = "N - Suc 0" and n = m in
PolynRg.P_mod_n_m[of "R" "Vr K v" "X"], assumption+)
apply (frule_tac x = "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m" in cart_prod_fst[of _ "carrier R" "carrier R"],
frule_tac x = "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m" in cart_prod_snd[of _ "carrier R" "carrier R"])
apply (rule aGroup.ag_pOp_closed, assumption+, rule aGroup.ag_mOp_closed,
assumption)
apply (rule Ring.ring_tOp_closed, assumption+)
apply (subst Suc_le_mono[THEN sym], simp)
apply assumption
apply (simp del:npow_suc)
apply (simp only:Ring.principal_ideal_n_pow1[THEN sym, of "Vr K v"])
apply (cut_tac n = N in an_neq_inf)
apply (subgoal_tac "an N ≠ 0")
apply (subst r_apow_def, simp) apply (simp add:na_an)
apply (frule Ring.principal_ideal[of "Vr K v" t], assumption)
apply (frule_tac I = "Vr K v ♢⇩p t" and n = N in Ring.ideal_pow_ideal[of "Vr K v"], assumption+)
apply (frule_tac x = "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m" in cart_prod_fst[of _ "carrier R" "carrier R"],
frule_tac x = "Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m" in cart_prod_snd[of _ "carrier R" "carrier R"])
apply (thin_tac "PCauchy⇘ R X K v ⇙Hfst K v R X t S Y f g0 h0",
thin_tac "PCauchy⇘ R X K v ⇙Hsnd K v R X t S Y f g0 h0")
apply (simp add:Hfst_def Hsnd_def)
apply (frule_tac x = "fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)" and y = "snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)" in Ring.ring_tOp_closed[of "R"], assumption+)
apply (frule_tac x = "(fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)) ⋅⇩r⇘R⇙ (snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m))" in aGroup.ag_mOp_closed[of "R"], assumption+)
apply (frule_tac I = "Vr K v ♢⇩p t ⇗♢(Vr K v) N⇖" and
p = "f ±⇘R⇙ -⇩a⇘R⇙ (fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m)) ⋅⇩r⇘R⇙
(snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ m))" in
PolynRg.P_mod_minus[of R "Vr K v" X], assumption+)
apply (frule Ring.ring_is_ag[of "R"])
apply (rule aGroup.ag_pOp_closed, assumption+)
apply (simp add:aGroup.ag_p_inv, simp add:aGroup.ag_inv_inv,
frule aGroup.ag_mOp_closed[of "R" "f"], assumption+)
apply (simp add:aGroup.ag_pOp_commute[of "R" "-⇩a⇘R⇙ f"])
apply (subst an_0[THEN sym])
apply (subst aneq_natneq[of _ "0"], thin_tac "an N ≠ ∞", simp)
done
theorem (in Corps) Hensel:"⟦valuation K v; Complete⇘v⇙ K;
PolynRg R (Vr K v) X; PolynRg S ((Vr K v) /⇩r (vp K v)) Y;
f ∈ carrier R; f ≠ 𝟬⇘R⇙; g' ∈ carrier S; h' ∈ carrier S;
0 < deg S ((Vr K v) /⇩r (vp K v)) Y g';
0 < deg S ((Vr K v) /⇩r (vp K v)) Y h';
((erH R (Vr K v) X S ((Vr K v) /⇩r (vp K v)) Y
(pj (Vr K v) (vp K v))) f) = g' ⋅⇩r⇘S⇙ h';
rel_prime_pols S ((Vr K v) /⇩r (vp K v)) Y g' h'⟧ ⟹
∃g h. g ∈ carrier R ∧ h ∈ carrier R ∧
deg R (Vr K v) X g ≤ deg S ((Vr K v) /⇩r (vp K v)) Y g' ∧
f = g ⋅⇩r⇘R⇙ h"
apply (frule PolynRg.is_Ring[of R "Vr K v" X],
frule PolynRg.is_Ring[of S "Vr K v /⇩r vp K v" Y],
frule vp_gen_t[of v], erule bexE,
frule_tac t = t in vp_gen_nonzero[of v], assumption)
apply (frule_tac t = t in Hensel_starter[of v R X S Y _ f g' h'], assumption+)
apply ((erule exE)+, (erule conjE)+, rename_tac g0 h0)
apply (frule Vr_ring[of v], frule Vr_integral[of v])
apply (rotate_tac 22, drule sym, drule sym, simp)
apply (frule vp_maximal[of v], simp)
apply (frule_tac mx = "Vr K v ♢⇩p t" in Ring.residue_field_cd[of "Vr K v"],
assumption)
apply (frule_tac mx = "Vr K v ♢⇩p t" in Ring.maximal_ideal_ideal[of "Vr K v"],
assumption)
apply (frule_tac I = "Vr K v ♢⇩p t" in Ring.qring_ring[of "Vr K v"],
assumption+)
apply (frule_tac B = "Vr K v /⇩r (Vr K v ♢⇩p t)" and h = "pj (Vr K v) (Vr K v ♢⇩p t)" in PolynRg.erH_rHom[of R "Vr K v" X S _ Y], assumption+)
apply (simp add:pj_Hom)
apply (frule_tac ?g0.0 = g0 and ?h0.0 = h0 in Hfst_PCauchy[of v R X S _ Y _ _
f], assumption+)
apply (frule_tac ?g0.0 = g0 and ?h0.0 = h0 in Hsnd_PCauchy[of v R X S _ Y _ _
f], assumption+)
apply (frule_tac F = "λj. Hfst⇘K v R X t S Y f g0 h0⇙ j" in PCauchy_Plimit[of v R X]
, assumption+)
apply (frule_tac F = "λj. Hsnd⇘K v R X t S Y f g0 h0⇙ j" in PCauchy_Plimit[of v R X]
, assumption+)
apply ((erule bexE)+, rename_tac g0 h0 g h)
apply (frule_tac F = "λj. Hfst⇘K v R X t S Y f g0 h0⇙ j" and
G = "λj. Hsnd⇘K v R X t S Y f g0 h0⇙ j" and ?p1.0 = g and ?p2.0 = h
in P_limit_mult[of v R X], assumption+, rule allI)
apply (simp add:pol_Cauchy_seq_def)
apply (simp add:pol_Cauchy_seq_def, assumption+)
apply (frule_tac t = t and ?g0.0 = g0 and ?h0.0 = h0 and g = g and h = h in
H_Plimit_f[of v _ R X S Y f], assumption+)
apply (frule_tac F = "λn. (Hfst⇘ K v R X t S Y f g0 h0⇙ n) ⋅⇩r⇘R⇙ (Hsnd⇘ K v R X t S Y f g0 h0⇙ n)" and ?p1.0 = "g ⋅⇩r⇘R⇙ h" and d = "na (deg R (Vr K v) X g0 + deg R (Vr K v) X f)" in P_limit_unique[of v R X _ _ _ f], assumption+)
apply (rule allI)
apply (frule PolynRg.is_Ring[of R],
rule Ring.ring_tOp_closed, assumption)
apply (simp add:pol_Cauchy_seq_def)
apply (simp add:pol_Cauchy_seq_def)
apply (rule allI)
apply (thin_tac "Plimit⇘ R X K v ⇙(Hfst K v R X t S Y f g0 h0) g",
thin_tac "Plimit⇘ R X K v ⇙(Hsnd K v R X t S Y f g0 h0) h",
thin_tac "Plimit⇘ R X K v ⇙(λn. (Hfst⇘ K v R X t S Y f g0 h0⇙ n) ⋅⇩r⇘R⇙
(Hsnd⇘ K v R X t S Y f g0 h0⇙ n)) (g ⋅⇩r⇘R⇙ h)",
thin_tac "Plimit⇘ R X K v ⇙(λn. (Hfst⇘ K v R X t S Y f g0 h0⇙ n) ⋅⇩r⇘R⇙
(Hsnd⇘ K v R X t S Y f g0 h0⇙ n)) f")
apply (subst PolynRg.deg_mult_pols1[of R "Vr K v" X], assumption+)
apply (simp add:pol_Cauchy_seq_def, simp add:pol_Cauchy_seq_def,
thin_tac "g' = erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0",
thin_tac "h' = erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) h0")
apply (subst PolynRg.deg_mult_pols1[THEN sym, of R "Vr K v" X], assumption+)
apply (simp add:pol_Cauchy_seq_def, simp add:pol_Cauchy_seq_def)
apply (frule_tac p1 = g0 in PolynRg.deg_mult_pols1[THEN sym, of R "Vr K v" X _ f], assumption+, simp)
apply (frule_tac x = g0 in Ring.ring_tOp_closed[of R _ f], assumption+)
apply (frule_tac p = "g0 ⋅⇩r⇘R⇙ f" in PolynRg.nonzero_deg_pos[of R "Vr K v" X],
assumption+)
apply (frule_tac p = "g0 ⋅⇩r⇘R⇙ f" in PolynRg.deg_in_aug_minf[of R "Vr K v" X],
assumption+, simp add:aug_minf_def,
simp add:PolynRg.polyn_ring_integral[of R "Vr K v" X],
simp add:Idomain.idom_tOp_nonzeros[of R _ f],
frule_tac p = "g0 ⋅⇩r⇘R⇙ f" in PolynRg.deg_noninf[of R "Vr K v" X],
assumption+)
apply (simp add:an_na)
apply (subst PolynRg.deg_mult_pols1[of "R" "Vr K v" "X"], assumption+,
simp add:pol_Cauchy_seq_def, simp add:pol_Cauchy_seq_def)
apply (frule_tac t = t and g = g0 and h = h0 and m = n in
PolynRg.P_mod_diffxxx5_4[of R "Vr K v" X _ S Y f], assumption+)
apply (erule conjE)
apply (frule_tac a = "deg R (Vr K v) X (fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n))" and a' = "deg R (Vr K v) X g0" and b = "deg R (Vr K v) X (snd (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n))" and b' = "deg R (Vr K v) X f" in aadd_plus_le_plus, assumption+)
apply simp
apply (simp add:Hfst_def Hsnd_def)
apply (rule Ring.ring_tOp_closed, assumption+)
apply (rotate_tac -1, drule sym)
apply (frule_tac F = "λj. Hfst⇘K v R X t S Y f g0 h0⇙ j" and p = g and ad = "deg S
(Vr K v /⇩r (Vr K v ♢⇩p t)) Y (erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0)" in Plimit_deg1[of v R X], assumption+,
simp add:pol_Cauchy_seq_def)
apply (rule allI)
apply (frule_tac t = t and g = g0 and h = h0 and m = n in
PolynRg.P_mod_diffxxx5_4[of R "Vr K v" X _ S Y f], assumption+,
erule conjE)
apply (frule_tac i = "deg R (Vr K v) X (fst (Hpr⇘ R (Vr K v) X t S Y f g0 h0⇙ n))" and
j = "deg R (Vr K v) X g0" and k = "deg S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(erH R (Vr K v) X S (Vr K v /⇩r (Vr K v ♢⇩p t)) Y
(pj (Vr K v) (Vr K v ♢⇩p t)) g0)" in ale_trans, assumption+)
apply (subst Hfst_def, assumption+, blast)
done
end